我有下面的“高度”函数,它返回树的高度。但是,当我尝试使用它时,我得到了这个例外。我该如何解决?我还有函数“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)))
***例外:功能高度的非详尽模式
答案 0 :(得分:1)
你height
的递归实现很不错,但你已经忘记了单叶的基本情况:
height (Leaf _) = 1
这是异常抱怨的缺失模式。这同样适用于您的第二个函数isBalanced
- 您还需要Leaf
的案例:
isBalanced (Leaf _) = True -- assuming a single-leaf tree is trivially balanced