prolog需要计算树的大小

时间:2015-06-04 06:45:44

标签: prolog size nodes

我需要使用size(Tree,Size)

来获取树的大小

到目前为止,我有什么不对,请指教!

size(empty, Size).
size(tree(L, _, R), Size) :-
    size(L, Left_Size),
    size(R, Right_Size),
    Size is
        Left_Size + Right_Size + 1.

输出应该产生:

?- size(node(1,2),X).
X = 2.
?- size(node(1,[2,3,4]),X).
X = 2.
?- size(node(node(a,b),[2,3,4]),X).
X = 3.

2 个答案:

答案 0 :(得分:1)

Prolog是一种声明性语言,您必须正确陈述您的模式:

size(node(L,R), Size) :- ... % why you add 1 to left+right sizes ?

从样本中,我建议在看到任何不是节点的东西时停止使用Size = 1的递归:

size(node(L,R), Size) :- !, ...
size(_, 1).

答案 1 :(得分:0)

size_tree(nil,0)。 %nil模拟一个空节点

size_tree(node(Root,Left,Right),Size):-

 Root\= nil,
 RootSize = 1,
 size_tree(Left, LeftSide),
 size_tree(Right, RightSide),
 Size is (RootSize + LeftSide + RightSide).
相关问题