Finding max & sum of a tree in Haskell with map

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
發佈了72 篇原創文章 · 獲贊 14 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章