在Haskell中查找二叉树的高度

时间:2017-11-16 09:56:19

标签: haskell

我有下面的“高度”函数,它返回树的高度。但是,当我尝试使用它时,我得到了这个例外。我该如何解决?我还有函数“isBalancedTree”,它检查给定的树是否平衡。

data Tree = Node Tree Int Tree | Leaf Int deriving Show

height :: Tree -> Integer
height (Node left x right) = 1 + max (height left) (height right)

isBalancedTree :: Tree -> Bool
isBalancedTree (Node left x right) = 
    let diff = abs (height left - height right) in
    diff <= 1 && isBalancedTree left && isBalancedTree right

*主&GT;高度(节点(节点(叶3)4(叶2))5(节点(叶4)7(叶6)))

***例外:功能高度的非详尽模式

1 个答案:

答案 0 :(得分:1)

height的递归实现很不错,但你已经忘记了单叶的基本情况:

height (Leaf _) = 1

这是异常抱怨的缺失模式。这同样适用于您的第二个函数isBalanced - 您还需要Leaf的案例:

isBalanced (Leaf _) = True -- assuming a single-leaf tree is trivially balanced