【发布时间】:2015-08-18 23:31:29
【问题描述】:
如果T 是平衡树,我需要实现一个谓词isBalanced/1 使得isBalanced(T) 为真。
在这种情况下,二叉树由结构 node(left,right) 定义,其中 left 和 right 可以是另一个节点或任何 Prolog 数据项。
到目前为止我所拥有的:
height(node(L,R), Size) :-
height(L, Left_Size),
height(R, Right_Size),
Size is Left_Size + Right_Size + 1 .
height(l(_),1).
isBalanced(l(_)).
isBalanced(node(B1,B2)):-
height(B1,H1),
height(B2,H2),
abs(H1-H2) =< 1,
isBalanced(B1),
isBalanced(B2).
预期输出:
?- isBalanced(1).
true.
?- isBalanced(node(1,2)).
true.
?- isBalanced(node(1,node(1,node(1,2)))).
false.
它不起作用,任何建议将不胜感激!
【问题讨论】:
-
你有什么问题?
-
...并添加 l/1 回来!相反,删除这个不正确的剪辑。
-
在你的first question 中,你有
size(empty, Size).但现在你说height(_,1)。你的意思是说一切都是高度一的吗?你的意思只是height(l(_),1)`。 -
另请注意,
height假定具有node/2术语的树,而isBalanced/1假定具有b/1术语的树。它们不兼容,因此您的查询将失败或循环(前提是height(_,1)已更正)。 -
对!不过
b/2和node/2还是不能统一!