有没有办法转换它,以便它根据高度检查平衡?(假设这就是问题所在。)
size :: Tree a -> Int
size (Leaf n) = 1
size (Node x z) = size x + size z + 1
isBalanced :: Tree a -> Bool
isBalanced (Leaf _) = True
isBalanced (Node l r) =
let diff = abs (size l - size r) in
diff <= 1 && isBalanced l && isBalanced r
例如:
isBalanced (Node (Node (Leaf 1)(Leaf 3)) (Leaf 2)) ) = True (Currently returns False)
isBalanced (Node (Node (Leaf 1)(Node (Leaf 1)(Leaf 3))) (Leaf 2))) = False