您的位置:首页 > 其它

Finding max & sum of a tree in Haskell with map

2016-06-24 03:15 369 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  haskell 算法