summaryrefslogtreecommitdiff
path: root/tests/general/btrees.icn
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