比较二叉树SWI序言中的节点

问题描述 投票:0回答:1

给我一个树构造器

tree(tip).
tree(bin(L,_,R)) :- tree(L), tree(R).

我的任务是确保给定一棵Ints树,如果L中的每个节点均<= X且R中的每个节点> = X,则bin(L,X,R)成立。因此,我想出了这个解决方案并且不确定我在做什么错。

代码:

bst(tip).
bst(bin(L,X,R)) :-
bst(L),
bst(R),
L <= X,
R >= X.

例如,构造树:

?- bst(bin(tip, 3, bin(tip, 4, tip))).

在TRUE时

?- bst(bin(tip, 3, bin(tip, 2, tip))).

是错误的。

我是Prolog的新手,所以任何建议都对您有所帮助

新部分:

getNode(bin(_,Y,_)) :-
Y.

bst(tip).
bst(bin(L,X,R)) :-
bst(L),
bst(R),
getNode(L) =< X,
getNode(R) >= X.
swi-prolog
1个回答
0
投票

您在这里有一个不错的开端,但有几个问题需要解决。

首先,我相信SWI Prolog中小于或等于的运算符是=<,而不是<=。>>

第二,更重要的是,您的比较L <= XR >= X无效,因为类型不匹配。您的变量LR应该是树,这意味着它们分别是tipbin术语。但是变量X可能是数字(树节点中的数据)。相反,您将需要检查树节点的Left和Right子级的数据部分(中间参数),并在比较中使用它。

© www.soinside.com 2019 - 2024. All rights reserved.