Menu
CoddyTech

Balanced Binary Tree

Массив root содержит двоичное дерево. Корень находится по индексу 0, потомки узла с индексом i находятся по индексам 2*i+1 (левый) и 2*i+2 (правый), -1 обозначает пустое место, а в конце могут следовать дополнительные элементы -1.

Верните true, если дерево сбалансировано по высоте, то есть высоты левого и правого поддеревьев отличаются не более чем на 1 в каждом узле, и false в противном случае. Высота поддерева — это количество узлов на его самом длинном нисходящем пути; высота пустого поддерева равна 0.

Функция

isBalanced(root: integer-array) → boolean
rootinteger-array
двоичное дерево в порядке уровней, где -1 обозначает пустое место
Возвращаетboolean
true, если высоты двух поддеревьев каждого узла отличаются не более чем на 1, иначе false

Ограничения

  • 1 ≤ root.length ≤ 32767
  • Каждый root[i] равен -1 или значению, для которого 0 ≤ root[i] ≤ 105.
  • root[0] никогда не равно -1, поэтому у дерева есть как минимум один узел.
  • После последнего узла в массиве могут быть лишние элементы -1.
  • Оба потомка пустого места тоже пусты, а глубина не превышает 14.
  • Значения узлов различны.

Примеры

Ввод
root = [5, 2, 9, -1, -1, 7, 11]
Вывод
true
Пояснение
Левое поддерево корня — это единственный узел 2, его высота — 1. Его правое поддерево 9, 7, 11 имеет высоту 2. Их высоты различаются на 1, а у всех остальных узлов высоты двух поддеревьев равны.
challenge icon

Дополнительный вопрос

Можешь проверить дерево без рекурсии, используя явный стек?

Сбросить код
def isBalanced(root):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргумент

root = [5, 2, 9, -1, -1, 7, 11]

Ожидаемый вывод

true