Task

Implement a binary tree where each node carries an integer,   and implement:

   pre-order,
   in-order, 
   post-order,     and 
   level-order   traversal. 


Use those traversals to output the following tree:

         1
        / \
       /   \
      /     \
     2       3
    / \     /
   4   5   6
  /       / \
 7       8   9

The correct output should look like this:

preorder:    1 2 4 7 5 3 6 8 9
inorder:     7 4 2 5 1 8 6 9 3
postorder:   7 4 5 2 8 9 6 3 1
level-order: 1 2 3 4 5 6 7 8 9



See also

   Wikipedia article:   Tree traversal.


preorder[a_Integer] := a; 
preorder[a_[b__]] := Flatten@{a, preorder /@ {b}}; 
inorder[a_Integer] := a; 
inorder[a_[b_, c_]] := Flatten@{inorder@b, a, inorder@c}; 
inorder[a_[b_]] := Flatten@{inorder@b, a}; postorder[a_Integer] := a; 
postorder[a_[b__]] := Flatten@{postorder /@ {b}, a}; 
levelorder[a_] := 
 Flatten[Table[Level[a, {n}], {n, 0, Depth@a}]] /. {b_Integer[__] :> 
    b};