2
我正在处理一个SWI-Prolog程序,我将两个二叉搜索树合并在一起,但是我收到了错误的输出。 BST T2
是将来自BST T1
的每个节点插入BST T
的结果。在Prolog中合并两个二叉搜索树
merge(T,T1,T2).
,我现在所拥有的代码:
add_BST(T , T1 , T2).
add_BST(t(L , T1 , R) , t(L , T2 , R), t(t(L , ROOT , RIGHT) , T1 , NT)) :-
T1 < T2 , add_BST(T2 , T1 , NT).
add_BST(t(L , T1 , R) , t(L , T2 , R), t(NT1 , T1 ,t(LEFT , ROOT ,R))) :-
T1 > T2 , add_BST(T2 , T1 ,NT1).
输出此:
?- add_BST(t(nil , 1 , nil) , t(nil , 2 , nil) , NT).
true;
NT=t(t(nil,_G1601, _G1602),1,_G1598)
我希望得到的输出二进制搜索树和不知道是什么我做错了。任何帮助将不胜感激。
你有一些不使用变量的情况。例如,在你的第二条规则中,应该使用什么变量“ROOT”? –
ROOT是为了存储树的屋顶 – user3765848
我猜你试图编译这段代码时会得到警告。不要忽视它们:如果你弄清楚为什么你会得到警告,以及如何避免它们,你可以自己解决问题。 – 2016-03-06 21:01:58