Resume
I found an interesting algorithm to find the max and sum of a tree in Haskell using map. This algorithm is pretty short and useful for me.
Type definition
data Tree = Leaf Int | Node [Tree]
In the definition above, we defined a tree. In the tree, we will have either a Leaf Int
or a Node [Tree]
.
Attention: this is not a binary tree. It can have many sub-nodes within a node.
Sum
sum' :: Tree -> Int
sum' (Leaf l) = l
sum' (Node node) = sum (map sum' node)
We use a map
to calculate every value of a Leaf
in the tree, then construct a list with these values. Finally, we can figure out the sum of the tree.
Max
max' :: Tree -> Int
max' (Leaf l) = l
max' (Node node) = maximum (map max' node)
Like sum
above, we can reuse it without major modification. Just replace sum
with maximum
. Then this function will figure out the maximum value of this tree recursively.
Test
let tree = Node [Node [Leaf 4, Leaf 5], Leaf 6]
*Main> let tree = Node [Node [Leaf 4, Leaf 5], Leaf 6]
*Main> sum' tree
15
*Main> max' tree
6