data Tree a = Node a (Tree a) (Tree a) | Tip flatten :: Tree a -> [a] flatten x = (flatten' x) [] flatten' :: Tree a -> [a] -> [a] flatten' (Node x left right) l = (flatten' left (x:(flatten' right l))) flatten' Tip l = l main = putStrLn $ show $ flatten $ (Node 2 (Node 1 Tip Tip) (Node 4 (Node 3 Tip Tip) Tip))