叶子的数量。如果我有一个树例如是这样的:序言 - 伯爵在树上
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)))
我很乐意帮忙!
叶子的数量。如果我有一个树例如是这样的:序言 - 伯爵在树上
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)))
我很乐意帮忙!
你可以做这样的:
count_leaves(l(_), 1).
count_leaves(b(B1, B2), N) :- count_leaves(B1, N1), count_leaves(B2, N2), N is N1 + N2.
基本上,树只是叶有一个叶。如果树以分支开始,则递归到两个分支并添加结果。
您的解决方案为您提供了no
,因为没有任何内容会与empty
相匹配。即使你修正了这个问题,你也不会计算叶子,而是计算内部节点。
非常感谢! – user940599
你能帮我解决其他问题吗? 我现在想编写一个程序,将树叶中的信息放入列表中。我试着这样做: leaves(l(_),[_])。 (B1,B2),[L]): - \t叶子(B1,[L1]), \t叶子(B2,[L2])。 追加(L1,L2,L)。 但它给了我L = [_ A]。这是为什么? – user940599
您应该询问另一个问题。 – svick
我试过了: 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