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