procedure main() bTree := [1, [2, [4, [7]], [5]], [3, [6, [8], [9]]]] showTree(bTree, preorder|inorder|postorder|levelorder) end procedure showTree(tree, f) writes(image(f),":\t") every writes(" ",f(tree)[1]) write() end procedure preorder(L) if \L then suspend L | preorder(L[2|3]) end procedure inorder(L) if \L then suspend inorder(L[2]) | L | inorder(L[3]) end procedure postorder(L) if \L then suspend postorder(L[2|3]) | L end procedure levelorder(L) if \L then { queue := [L] while nextnode := get(queue) do { every put(queue, \nextnode[2|3]) suspend nextnode } } end