Prolog - 平衡树与否

时间:2011-09-05 11:33:20

标签: prolog tree-balancing

我想写一个程序,告诉我树是否平衡。在这种情况下,平衡意味着相同的高度或高度差为1。

这是我到目前为止所写的内容,但它不适用于1的高度差。为什么?

balanced(l(_)).
balanced(b(B1, B2)):-
    height(B1,H),
    height(B2,H),
    balanced(B1),
    balanced(B2).

balanced(b(B1,B2)):-
    height(B1,H + 1),
    height(B2,H),
    balanced(B1),
    balanced(B2).

balanced(b(B1,B2)):-
    height(B1,H),
    height(B2,H + 1),
    balanced(B1),
    balanced(B2).

1 个答案:

答案 0 :(得分:1)

如果您不告诉Prolog进行算术评估,则

H + 1不会计算为H的值加1;相反,Prolog构建一个术语,+作为函子,H1作为参数。 (尝试H + 1 =.. L并检查L的值,以使自己相信这一事实。)

执行类似

的操作
height(B1, H1),
height(B2, H2),
abs(H1 - H2) =< 1.

=<将执行算术评估。