Given a binary tree,
determine if it is height-balanced.
For this problem, a
height-balanced binary tree is defined as a binary tree in which the depth of
the two subtrees of every node never differ by more than 1.
Задано бинарное дерево. Определите,
является ли оно сбалансированным по высоте.
Дерево считается
сбалансированным по высоте, если для каждой его вершины высоты левого и правого
сына отличаются не более чем на 1.
class Solution {
public:
bool isBalanced(TreeNode* root) {
}
};
структуры данных - деревья
Напишем функцию высоты бинарного дерева. Для каждой вершины вычисляем
высоту его левого и правого сына. Для выполнения условия сбалансированности эти
высоты должны отличаться не более чем на 1. Если это условие для какой-то
вершины нарушится, функция Height вернет -1.
Реализация алгоритма
class
Solution
{
public:
bool
isBalanced(TreeNode* root)
{
return
(Height(root) != -1);
}
int
Height(TreeNode* root)
{
if(root ==
NULL)
return 0;
int Left =
Height(root->left);
int Right =
Height(root->right);
if(Left ==
-1 || Right == -1 || abs(Left - Right) > 1 )
return -1;
return
max(Left,Right) + 1;
}
};