Prolog - 树中和树之间的减法

时间:2013-02-28 02:32:51

标签: prolog

这是我遇到的问题。如何递归地减去二叉树中的值?

subtractTree(tree(leaf(4), tree(leaf(2), leaf(1))),S).
  S = 3.

对于此示例,它首先在减去树之间的值之前减去每棵树中的叶子。所以对于第一棵树,它的值为4.第二棵树,它的值为1,因为2-1 = 1。然后它在树之间减去4-1,答案是3。

2 个答案:

答案 0 :(得分:2)

因为你的树结构有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 :(得分:1)

你有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.