57 lines
980 B
Prolog
57 lines
980 B
Prolog
tree :-
|
|
Tree= [1,
|
|
[2,
|
|
[4,
|
|
[7, nil, nil],
|
|
nil],
|
|
[5, nil, nil]],
|
|
[3,
|
|
[6,
|
|
[8, nil, nil],
|
|
[9,nil, nil]],
|
|
nil]],
|
|
|
|
write('preorder : '), preorder(Tree), nl,
|
|
write('inorder : '), inorder(Tree), nl,
|
|
write('postorder : '), postorder(Tree), nl,
|
|
write('level-order : '), level_order([Tree]).
|
|
|
|
preorder(nil).
|
|
preorder([Node, FG, FD]) :-
|
|
format('~w ', [Node]),
|
|
preorder(FG),
|
|
preorder(FD).
|
|
|
|
|
|
inorder(nil).
|
|
inorder([Node, FG, FD]) :-
|
|
inorder(FG),
|
|
format('~w ', [Node]),
|
|
inorder(FD).
|
|
|
|
postorder(nil).
|
|
postorder([Node, FG, FD]) :-
|
|
postorder(FG),
|
|
postorder(FD),
|
|
format('~w ', [Node]).
|
|
|
|
|
|
level_order([]).
|
|
|
|
level_order(A) :-
|
|
level_order_(A, U-U, S),
|
|
level_order(S).
|
|
|
|
level_order_([], S-[],S).
|
|
|
|
level_order_([[Node, FG, FD] | T], CS, FS) :-
|
|
format('~w ', [Node]),
|
|
append_dl(CS, [FG, FD|U]-U, CS1),
|
|
level_order_(T, CS1, FS).
|
|
|
|
level_order_([nil | T], CS, FS) :-
|
|
level_order_(T, CS, FS).
|
|
|
|
|
|
append_dl(X-Y, Y-Z, X-Z).
|