31 lines
896 B
Text
31 lines
896 B
Text
main :: [sys_message]
|
|
main = [Stdout (lay [show (f example)
|
|
| f <- [preorder,inorder,postorder,levelorder]])]
|
|
|
|
example :: tree num
|
|
example = Node 1 (Node 2 (Node 4 (leaf 7) Nilt)
|
|
(leaf 5))
|
|
(Node 3 (Node 6 (leaf 8) (leaf 9)) Nilt)
|
|
|
|
tree * ::= Nilt | Node * (tree *) (tree *)
|
|
|
|
leaf :: *->tree *
|
|
leaf k = Node k Nilt Nilt
|
|
|
|
preorder :: tree *->[*]
|
|
preorder Nilt = []
|
|
preorder (Node v l r) = v : preorder l ++ preorder r
|
|
|
|
inorder :: tree *->[*]
|
|
inorder Nilt = []
|
|
inorder (Node v l r) = inorder l ++ v : inorder r
|
|
|
|
postorder :: tree *->[*]
|
|
postorder Nilt = []
|
|
postorder (Node v l r) = postorder l ++ postorder r ++ [v]
|
|
|
|
levelorder :: tree *->[*]
|
|
levelorder t = f [t]
|
|
where f [] = []
|
|
f (Nilt:xs) = f xs
|
|
f (Node v l r:xs) = v : f (xs++[l,r])
|