二叉搜索树中的Prolog范围搜索返回false

时间:2013-12-15 22:18:15

标签: prolog binary-search-tree

我正在尝试在二叉搜索树中搜索范围。但是这段代码返回false。我不确定问题出在哪里。

mytree1(node(5, node(3, nil, nil),
        node(8, node(7, nil, nil),
            node(9, nil, nil)))).


findExamsInRange(X,Y, T) :- find(X,Y,T).
find(X,Y, node(X, _, _)).
find(X,Y, node(N, L, _)) :- N > X,
                between(X,Y,N),
                find(X,Y,L), append(N, V).
find(X, node(N, _, R)) :-   N < X,
                between(X,Y,N),
                find(X,Y,R), append(N, V).

1 个答案:

答案 0 :(得分:1)

嘿,有怯懦!     findExamsInRange(X,Y,T): - find(X,Y,T)。 首先这个是没有必要的,因为findExamsInRange和find似乎都有相同的目标。那么为什么要创建一个新的谓词?

在浏览完代码之后...我发现您将所选节点附加到名为“V”的列表中。 但是你没有通过你的主谓词(find)将它作为结果传递给你。 还有很多事情你需要解决...你不是在处理你到达树的叶子并且有一个有两个nils的节点的情况。 你有两个不同的情况,一个是你正确的,另一个是你要离开...但事实上,如果你的节点是IN范围你应该左右两边。 那些不满足范围的案件怎么样?你应该考虑那些并包括它们......否则你会因为没有案件而得到“假”。     find(X,Y,node(X,_,_))。 这行代码没用......我建议你删除它。 所以要结束...我认为最好是在你的谓词中添加一个参数来传递列表(作为一个开头),之后你需要为nil个案例添加一些表示树结束的案例