Учитывая бинарное дерево, определите, сбалансировано ли оно по высоте.
Для этой задачи сбалансированное по высоте бинарное дерево определяется как:
Двоичное дерево, в котором левое и правое поддеревьякаждогоузла отличаются по высоте не более чем на 1.
Пример 1:
Input: root = [1,2,2,3,3,null,null,4,4] Output: false
Решение:
В данной задаче мы должны проверить, сбалансировано ли дерево по высоте или нет.
Сбалансированное по высоте дерево — это дерево, в котором разница высоты левого и правого поддеревьев не превышает 1.
Во-первых, мы проверим, является ли корень нулевым. Если да, то мы вернем true.
if(root == NULL) return true;
Мы создадим две переменные, leftH и rightH, для хранения высоты левого и правого поддеревьев соответственно. Другая переменная, diff, будет создана для хранения абсолютной разницы между leftH и rightH.
int leftH = height(root -> left); int rightH = height(root -> right); int diff = abs(rightH - leftH);
Теперь мы вернем true, если diff меньше или равен 1, а левое и правое поддеревья сбалансированы.
return diff <= 1 && isBalanced(root -> left) && isBalanced(root -> right);
Последний шаг — создать функцию для вычисления высоты дерева.
Здесь мы сначала проверим, является ли корень нулевым. Если да, вернуть 0.
int height(TreeNode* root) { if(root == NULL) return 0;
Если корень не равен null, то мы вернем максимум из высоты левого поддерева и правого поддерева. И 1 будет добавлено к максимальному значению.
else return 1 + max(height(root -> left), height(root -> right)); }
Ниже приведен полный код для данной проблемы:
Спасибо за прочтение!
S.