0
這是我遇到的問題。如何遞歸地減去二叉樹中的值?Prolog - 樹中和樹間的減法
subtractTree(tree(leaf(4), tree(leaf(2), leaf(1))),S).
S = 3.
對於這個例子,它首先在減去樹之間的值之前減去每棵樹中的樹葉。所以對於第一棵樹,它的值爲4.第二棵樹,它的值爲1,因爲2-1 = 1。然後減去樹木之間4-1和答案是3
這是我遇到的問題。如何遞歸地減去二叉樹中的值?Prolog - 樹中和樹間的減法
subtractTree(tree(leaf(4), tree(leaf(2), leaf(1))),S).
S = 3.
對於這個例子,它首先在減去樹之間的值之前減去每棵樹中的樹葉。所以對於第一棵樹,它的值爲4.第二棵樹,它的值爲1,因爲2-1 = 1。然後減去樹木之間4-1和答案是3
你有4例: 基本情況:只用樹葉
subtractTree(tree(leaf(A), leaf(B)),S) :-
S is A-B.
2中間的情況下,樹木一片葉子和樹的葉子
subtractTree(tree(leaf(A), Tree2),S) :-
subtractTree(Tree2, S1),
S is A - S1.
subtractTree(tree(Tree1, leaf(B)),S) :-
subtractTree(Tree1, S1),
S is S1 - B.
一般情況下,一棵樹的葉子這是樹:
subtractTree(tree(Tree1, Tree2),S) :-
subtractTree(Tree1, S1),
subtractTree(Tree2, S2),
S is S1 - S2.
因爲你的樹結構具有元數2(因爲它必須是),你可以做一個非常簡單的訪問
subtractTree(leaf(N), N).
subtractTree(tree(L, R), S) :-
subtractTree(L, X),
subtractTree(R, Y),
S is X - Y.
測試:
?- subtractTree(tree(leaf(4), tree(leaf(2), leaf(1))),S).
S = 3.
+1了很好的解釋。我會注意到,O.P.樹結構顯然缺乏代表空樹—的能力,因此,您的示例也是如此。 – 2013-02-28 18:05:19
@NicholasCarey(和joel76)是的,但是單葉樹呢? – 2013-02-28 19:29:32
在O.P.問題中,樹有2片樹葉,我回答了問題...... – joel76 2013-02-28 21:44:02