自定义二叉搜索树的逻辑问题

时间:2013-12-17 03:20:51

标签: prolog

我正在尝试定义一个简单的二叉搜索树。它存储在如下列表中:[Key,Left Tree,Right Tree]。我的逻辑问题。这就是我所拥有的

bstadd(K, [], [K,[],[]]).
bstadd(K, [X|_], [X, [], [K, [], []]]) :- K > X.
bstadd(K, [X, [], [K, [], []]], [X|_]) :- K < X.

这是我查询的内容

1 ?- bstadd(19, [],T1), bstadd(20,T1,T2), bstadd(21,T2,T3).

这就是我的结果

T1 = [19, [], []],
T2 = [19, [], [20, [], []]],
T3 = [19, [], [21, [], []]]

这就是我需要的

[19, [], [20, [], [21, [], []]]]

任何帮助都会很精彩。几天来,我一直在靠墙撞击。

1 个答案:

答案 0 :(得分:2)

这是我的解决方案。让我知道你的想法,如果你发现它很难理解,我很乐意帮助你。

bstadd(Value, [], [Value,[],[]]).
bstadd(Value,[Key,Left,Right],X) :- Value \= Key , % no duplicates in BST
                                    (
                                      Value < Key -> % if Value < Key
                                        % then add to left side
                                        bstadd(Value,Left,Rez) ,
                                        X = [Key,Rez,Right]
                                      ; %else (Value > Key)
                                        % then add to right side
                                        bstadd(Value,Right,Rez) ,
                                        X = [Key,Left,Rez]
                                    ).