record node( data, ltree, rtree ) procedure main() local line, tree write("type tree in prefix form eg. 1(2(3,4),5)") while line := read() do { tree := tform(line) write("tree walk") every write(walk(tree)) # walk generates nodes in postfix order write("leaves") every write(leaves(tree)) # leaves generates leaf nodes only } end procedure tform(s) # parse (prefix) binary tree, eg. 1(2(3,4),5(6,7)) 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) # postfix suspend walk( \t.ltree | \t.rtree ) # generate left, then right return t.data # then data in t end procedure leaves(t) if not( \t.ltree | \t.rtree ) then return t.data # t is a leaf suspend leaves( \t.ltree | \t.rtree ) # t not a leaf end #\fB Binary Trees. \fP