Menu
CoddyTech

Kth Smallest Element in a BST

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

Верни k-е наименьшее значение в дереве, считая с 1.

Функция

kthSmallest(root: integer-array, k: integer) → integer
rootinteger-array
двоичное дерево поиска в порядке уровней, где -1 обозначает пустое место
kinteger
позиция, которую нужно найти в порядке возрастания, начиная с 1
Возвращаетinteger
k-е наименьшее значение в дереве

Ограничения

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

Примеры

Ввод
root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]k = 4
Вывод
29
Пояснение
В порядке возрастания значения: 6, 17, 22, 29, 41, 65, 90, а четвёртое — 29. Это наибольшее из четырёх значений в левом поддереве корня.
challenge icon

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

Если дерево часто изменяется и вас много раз просят найти значение, которое является k-м по величине, что можно хранить в каждом узле, чтобы каждый запрос занимал O(h)?

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

Тест #1

Тест #2

Аргументы

root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]
k = 4

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

29