Programming in Haskell
Haskell Textbook: "
Ed.", by Graham Hutton
Programming in Haskell:
data Tree a b = Leaf a | Branch b (Tree a b) (Tree a b)
Implement the three functions that traverse the tree in
the given order collecting the values from the tree nodes into a list:
preorder :: (a -> c) -> (b -> c) -> Tree a b -> [c]
inorder :: (a -> c) -> (b -> c) -> Tree a b -> [c]
postorder :: (a -> c) -> (b -> c) -> Tree a b -> [c]
Also, show how each of your three functions work step-by-step with the following tree object.
tree1 :: Tree Int String
tree1 = Branch "+"
(Branch "*"
(Leaf 3)
(Branch "+" (Leaf 4) (Leaf 5)))
(Branch "+"
(Branch "*" (Leaf 6) (Leaf 7))
(Leaf 8))
Notice that the data type Tree can store different types of values in the leaves than on
the branching nodes. Thus, each of these functions takes two functions as arguments: The
first function maps the values stored in the leaves to some common type c, and the second
function maps the values stored in the branching nodes to type c, thus, resulting in a list
of type [c].
Step by step
Solved in 2 steps