【发布时间】:2023-12-30 01:41:01
【问题描述】:
我正在开发一个 SWI-Prolog 程序,在该程序中我将两个二叉搜索树合并在一起,但我得到了错误的输出。 BST T2 是将 BST T1 中的每个节点插入到 BST T 的结果。
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是用来存放树顶的
-
我猜您在尝试编译此代码时会收到警告。不要忽视它们:如果你弄清楚为什么会收到警告,以及如何避免它们,你可能会自己解决问题。