haskell 检查平衡树

标签 haskell tree

如何检查这棵树是否平衡?

data Tree a = Leaf a | Node (Tree a) (Tree a)

size :: Tree a -> Int
size (Leaf n)    = 1
size (Node x z) = size x + size z + 1

这是我到目前为止所拥有的:

isBalancedTree :: Tree a -> Bool
isBalancedTree (Node l r) = abs (size l - size r) <= 1
                            && isBalancedTree l && isBalancedTree r
isBalancedTree _ = False

最佳答案

叶子是平衡的,因此最后一行的计算结果应该为 True,这会导致您:

isBalancedTree :: Tree a -> Bool
isBalancedTree (Leaf _) = True
isBalancedTree (Node l r) = 
    let diff = abs (size l - size r) in
    diff <= 1 && isBalancedTree l && isBalancedTree r

关于haskell 检查平衡树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30021075/

相关文章:

haskell - 如何在 Haskell 中返回 bool 值

haskell - 为什么 Eratosthenes 的筛选需要额外的辅助函数来合并无限列表?

haskell - 尝试将随机字符串传递给 Haskell 中的 SHA

ruby-on-rails-3 - Rails 祖先分页

ruby - 这种类似哈希/树状的构造称为什么?

c - 如何使用 c 在控制台中水平打印带有链接的树

haskell - 使用 ExistentialQuantification 扩展时派生显示?

javascript - JQuery 树遍历 - 上树而不是下树

Java查找树中寻找节点的路径

haskell - 自动导出 SBV 中记录谓词的可证明