diff options
Diffstat (limited to 'tests/general/btrees.icn')
-rw-r--r-- | tests/general/btrees.icn | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/general/btrees.icn b/tests/general/btrees.icn new file mode 100644 index 0000000..bc786f5 --- /dev/null +++ b/tests/general/btrees.icn @@ -0,0 +1,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 |