data Tree = Empty | Node( value, left, right ) def preorder( Empty ) = [] preorder( Node(v, l, r) ) = [v] + preorder( l ) + preorder( r ) inorder( Empty ) = [] inorder( Node(v, l, r) ) = inorder( l ) + [v] + inorder( r ) postorder( Empty ) = [] postorder( Node(v, l, r) ) = postorder( l ) + postorder( r ) + [v] levelorder( x ) = def order( [] ) = [] order( Empty : xs ) = order( xs ) order( Node(v, l, r) : xs ) = v : order( xs + [l, r] ) order( [x] ) tree = Node( 1, Node( 2, Node( 4, Node( 7, Empty, Empty ), Empty ), Node( 5, Empty, Empty ) ), Node( 3, Node( 6, Node( 8, Empty, Empty ), Node( 9, Empty, Empty ) ), Empty ) ) println( preorder(tree) ) println( inorder(tree) ) println( postorder(tree) ) println( levelorder(tree) )