二进制堆到List

时间:2012-08-29 19:53:15

标签: list tree prolog append binary-tree

尝试将树结构附加到列表中。在Erlang中,我会使用++运算符进行追加,但在Prolog中执行此操作时会出现语法错误。

我将包含我的错误代码,其中包含我认为缺少的列表附加内容。

tree2list(leaf(X),L++[X]).
tree2list(branch(Branch1,Branch2),L):-
tree2List(B1,L1),
tree2List(B2,L2),
L++L1++L2.

如何解决我的追加问题?

1 个答案:

答案 0 :(得分:1)

当然,请使用差异列表:

tree2list(leaf(X),[X|A]-A).
tree2list(branch(B1,B2),L-Z):-
        tree2list(B1,L-A),
        tree2list(B2,A-Z).

/* 7 ?- tree2list(branch(leaf(1),leaf(2)), L-[]).
L = [1, 2] ;
No
8 ?- */

但你的树似乎没有空枝。因此添加它们:

tree2list(empty,A-A).

/* 10 ?- tree2list(branch(branch(leaf(1),leaf(2)),empty), L-[]).
L = [1, 2] ;
No
11 ?- */