prolog递归地找到最大的节点

时间:2008-11-25 15:38:14

标签: prolog binary-tree

只是一个简单的二叉树,我想找到最大的节点。 例子树:t(t(t(nil,1,nil),2,t(nil,3,nil)),4,t(t(t(nil,8,nil),5,nil ),6,T(零,如图7所示,无)))

int L(t,max) {
if(t=null) return max;
if(max<t.root) max = t.root;
LN(t,max);
RN(t,max);
return max;
}
L(tree,tree.root);

我无法将其应用于prolog。在这里我显示每个节点。我得到了,但我不明白如何保存最大值并保持递归。

tree(nil).
tree(t(L,Root,R)) :- 
    tree(L),
    tree(R), 
    write(Root).

编辑:检查所有叶节点,但忽略t(nil,8,nil)

tree(nil,0).
tree(t(nil,Q,nil),Q) :- !.
tree(t(nil,Q,_),Q).
tree(t(_,Q,nil),Q).
tree(t(L,_,R),Max) :- 
    tree(L, LValue),
    tree(R, RValue), 
    max(LValue,RValue,Max).

1 个答案:

答案 0 :(得分:2)

这是another homework assignment吗?

无论如何,我会尝试让你思考,因为你似乎在学习Prolog。更不用说我实际上没有在我的计算机上运行Prolog,所以我不能确定我建议的解决方案是否真的有用。

事实上,5是唯一一个只有一个子节点的节点(即它忽略的是8)应该告诉你一些事情。所有其他节点都是叶节点或有两个子节点。

您认为这两条规则到底是什么意思?

tree(t(nil,Q,_),Q).
tree(t(_,Q,nil),Q).