Menu
CoddyTech

Validate Binary Search Tree

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

Напишите функцию с именем isValidBST, которая возвращает true, если дерево является бинарным деревом поиска, и false в противном случае. В бинарном дереве поиска значение каждого узла строго больше любого значения в его левом поддереве и строго меньше любого значения в его правом поддереве. Два равных значения никогда не могут одновременно присутствовать в корректном дереве.

Функция

isValidBST(tree: integer-array) → boolean
treeinteger-array
бинарное дерево в порядке уровней, где -1 обозначает пустое место
Возвращаетboolean
true, если дерево является бинарным деревом поиска, иначе false

Ограничения

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

Примеры

Ввод
tree = [8, 3, 12, 1, 6, 10, 15]
Вывод
true
Пояснение
Каждый узел находится с правильной стороны относительно всех узлов выше него. При чтении по порядку (левое поддерево, узел, правое поддерево) получаются значения 1, 3, 6, 8, 10, 12, 15, строго возрастающие, что и обеспечивает дерево поиска.

lock icon+16 скрытых тестов при отправке

challenge icon

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

Родитель узла с индексом i находится по индексу (i-1)/2, округлённому вниз. Сможешь обойти дерево по порядку, используя дополнительное пространство O(1) и переходя к родителям вместо хранения стека или рекурсивного вызова?

Сбросить код
def isValidBST(tree):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

tree = [8, 3, 12, 1, 6, 10, 15]

Ожидается

true