Есть ли способ конвертировать это, чтобы он проверял баланс в зависимости от высоты? (Предполагается, что это то, что проблема есть.)Haskll, сбалансированная по высоте проверка
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
Это, кажется, решить эту проблему, спасибо! – user3633383