76 lines
1.5 KiB
Text
76 lines
1.5 KiB
Text
type
|
|
Node = struct {
|
|
int val;
|
|
*Node left, right;
|
|
},
|
|
Tree = *Node;
|
|
|
|
proc tree(int v; Tree l, r) Tree:
|
|
Tree t;
|
|
t := new(Node);
|
|
t*.val := v;
|
|
t*.left := l;
|
|
t*.right := r;
|
|
t
|
|
corp
|
|
|
|
proc preorder(Tree t) void:
|
|
if t /= nil then
|
|
write(t*.val, ' ');
|
|
preorder(t*.left);
|
|
preorder(t*.right)
|
|
fi
|
|
corp
|
|
|
|
proc inorder(Tree t) void:
|
|
if t /= nil then
|
|
inorder(t*.left);
|
|
write(t*.val, ' ');
|
|
inorder(t*.right)
|
|
fi
|
|
corp
|
|
|
|
proc postorder(Tree t) void:
|
|
if t /= nil then
|
|
postorder(t*.left);
|
|
postorder(t*.right);
|
|
write(t*.val, ' ')
|
|
fi
|
|
corp
|
|
|
|
proc levelorder(Tree t) void:
|
|
[256]Tree q;
|
|
word s, e;
|
|
s := 0;
|
|
q[s] := t;
|
|
e := 1;
|
|
while s /= e do
|
|
if q[s] /= nil then
|
|
q[e] := q[s]*.left;
|
|
q[e+1] := q[s]*.right;
|
|
e := e+2;
|
|
write(q[s]*.val, ' ')
|
|
fi;
|
|
s := s+1
|
|
od
|
|
corp
|
|
|
|
proc main() void:
|
|
Tree t;
|
|
t := tree(1,
|
|
tree(2,
|
|
tree(4,
|
|
tree(7,nil,nil),
|
|
nil),
|
|
tree(5,nil,nil)),
|
|
tree(3,
|
|
tree(6,
|
|
tree(8,nil,nil),
|
|
tree(9,nil,nil)),
|
|
nil));
|
|
|
|
write("preorder: "); preorder(t); writeln();
|
|
write("inorder: "); inorder(t); writeln();
|
|
write("postorder: "); postorder(t); writeln();
|
|
write("level-order: "); levelorder(t); writeln();
|
|
corp
|