Prolog中的树后序遍历

Mar*_*ark 4 prolog dcg

树遍历是指以系统方式访问树数据结构中的每个节点的过程.在postorder下面的图像中遍历

Sorted_binary_tree

回报A, C, E, D, B, H, I, G, F (left, right, root).PREORDER遍历的Prolog代码是

preorder(tree(X,L,R),Xs) :-
    preorder(L,Ls),
    preorder(R,Rs),
    append([X|Ls],Rs,Xs).

preorder(void,[]).
Run Code Online (Sandbox Code Playgroud)

我想修改上面的代码来实现postorder遍历.

mat*_*mat 5

伙计们,请在描述列表时考虑使用DCG,例如:

preorder(void) --> [].
preorder(tree(X, L, R)) -->
        [X],
        preorder(L),
        preorder(R).
Run Code Online (Sandbox Code Playgroud)

用法:

?- phrase(preorder(Tree), List).
Run Code Online (Sandbox Code Playgroud)

您只需决定将[X]放在序列中的哪个位置即可获得不同的订单.