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