检查二叉树是否是完整的二叉树的算法是什么? (使用Prolog)。
例如:
?- complete(nil).
true.
?- complete(tree(1,nil,nil)).
true.
?- complete(tree(1,tree(2,nil,nil),nil)).
false.
?- complete(tree(1,tree(2,nil,nil),tree(3,nil,nil))).
true.
答案 0 :(得分:2)
complete(T) :- complete(T, _).
complete(nil, 0).
complete(tree(_, L, R), N) :-
complete(L, N1),
complete(R, N1),
N is N1 + 1.
<强>更新强>:
它对我有用:
?- complete(nil).
true.
?- complete(tree(1,nil,nil)).
true.
?- complete(tree(1,tree(2,nil,nil),nil)).
false.
?- complete(tree(1,tree(2,nil,nil),tree(3,nil,nil))).
true.