2011-09-03 69 views
1

叶子的数量。如果我有一个树例如是这样的:序言 - 伯爵在树上

tree3(b(l(1),b(l(2),l(3)))). 

我怎么会写计数叶片数的程序? 我想,当一直使用它它看起来是这样的:

?- tree3(T), count_leaves(T, N). 

N = 3, 
T = b(l(1),b(l(2),l(3))) 

我很乐意帮忙!

+1

我试过了: count_leaves(empty,0)。 count_leaves(树(L,_,R),TOTAL_SIZE): - \t count_leaves(L,Left_Size), \t count_leaves(R,Right_Size), \t TOTAL_SIZE是Left_Size + Right_Size + 1 但它只是给我没有。 – user940599

回答

4

你可以做这样的:

count_leaves(l(_), 1). 
count_leaves(b(B1, B2), N) :- count_leaves(B1, N1), count_leaves(B2, N2), N is N1 + N2. 

基本上,树只是叶有一个叶。如果树以分支开始,则递归到两个分支并添加结果。

您的解决方案为您提供了no,因为没有任何内容会与empty相匹配。即使你修正了这个问题,你也不会计算叶子,而是计算内部节点。

+0

非常感谢! – user940599

+0

你能帮我解决其他问题吗? 我现在想编写一个程序,将树叶中的信息放入列表中。我试着这样做: leaves(l(_),[_])。 (B1,B2),[L]): - \t叶子(B1,[L1]), \t叶子(B2,[L2])。 追加(L1,L2,L)。 但它给了我L = [_ A]。这是为什么? – user940599

+0

您应该询问另一个问题。 – svick