blob: bc786f56c985f595bbd19c15209c7617358990fe (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#
# B I N A R Y T R E E S
#
# This program accepts string representations of binary trees from
# standard input. It performs a tree walk and lists the leaves of
# each tree.
record node(data,ltree,rtree)
procedure main()
local line, tree
while line := read() do {
tree := tform(line)
write("tree walk")
every write(walk(tree))
write("leaves")
every write(leaves(tree))
}
end
procedure tform(s)
local value,left,right
if /s then return
s ? if value := tab(upto('(')) then {
move(1)
left := tab(bal(','))
move(1)
right := tab(bal(')'))
return node(value,tform(left),tform(right))
}
else return node(s)
end
procedure walk(t)
suspend walk(\t.ltree | \t.rtree)
return t.data
end
procedure leaves(t)
if not(\t.ltree | \t.rtree) then return t.data
suspend leaves(\t.ltree | \t.rtree)
end
|