2

このツリーのバランスが取れていることを確認するにはどうすればよいですか?

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
4

1 に答える 1

3

リーフはバランスが取れているため、最後の行は実際には に評価され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
于 2015-05-04T00:48:44.837 に答える