2013-03-21 41 views
0

任何人都可以幫助我如何實現在Prolog中計算二叉樹的所有節點數的謂詞嗎?序言二進制樹節點值計數

例如:

tree1(tree(1, 
     tree(2, 
      tree(3,nil,nil), 
      tree(4,nil,nil)), 
     tree(5, 
      tree(6,nil,nil), 
      tree(7,nil,nil)) 
    ) 
). 

將返回28.任何人都可以幫助嗎?

+2

你確定23嗎?對我來說看起來像28,或者我誤解了這個問題。 – 2013-03-21 09:39:04

+0

我的錯誤是28 – John 2013-03-21 14:32:20

回答

1

平凡的遞歸解決方案。 不是尾遞歸。

treesum(nil, 0). 
treesum(tree(X,T1,T2), S) :- 
    treesum(T1, S1), treesum(T2, S2), 
    S is X+S1+S2. 
+0

謝謝你的回答,幫了我很多。而乘法呢?我怎麼能意識到這一點? – John 2013-03-21 14:33:11

+0

@John乘法而不是加法也許??? – 2013-03-22 13:07:31

+0

在這種情況下,我不能只是將'+'更改爲'*',因爲我這樣做,並且Prolog始終給我答案0(程序GNU Prolog)。因爲當我追蹤這個乘法的例子,在每個節點它乘以0.這是一個乘法的例子,只是第一部分,所有其他的都是相同的: 6 4退出:0是3 *(0 * 0 )? ' – John 2013-03-22 20:01:01