如果对于树中的每个非叶节点,存储在该节点的数字小于或等于该数字,则二进制数字树称为堆(或者,它被称为满足堆属性)存储在每个孩子身上。例如,以下树满足堆属性,因为3≤5,5≤8且5≤7。
tree(empty,3,tree(tree(empty,8,empty),5,tree(empty,7,empty)))
另一方面,以下树不满足堆属性,因为6不小于或等于5.
tree(tree(tree(empty,4,empty),
3,tree(empty,5,empty)),6,tree(tree(empty,9,empty),7,empty))
示例:
?- is_heap(tree(tree(tree(empty,4,empty),
3,tree(empty,5,empty)),6,tree(tree(empty,9,empty),7,empty))).
false.
?- is_heap(tree(empty,3,tree(tree(empty,8,empty),5,tree(empty,7,empty)))).
true
任何帮助都会得到满足。
答案 0 :(得分:1)
你可以这样开始。树在tree(Value, Left, Right)
,但您可以轻松更改。然后你开始:
is_heap(empty).
is_heap(tree(X, L, R)) :-
is_heap(L, X),
is_heap(R, X).
现在你只需要写is_heap/2
,然后就可以了。类似的东西:
is_heap(empty, ...).
is_heap(tree(X, L, R), X0) :-
...,
is_heap(L, X),
....