Menu
CoddyTech

Lowest Common Ancestor of a BST

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

Напишите функцию с именем lowestCommonAncestor, которая возвращает значение наименьшего общего предка p и q: самого глубокого узла, в поддереве которого находятся оба этих узла. Узел считается частью собственного поддерева, поэтому, если p находится выше q, ответом будет сам p.

Функция

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
двоичное дерево поиска в порядке уровней, где -1 обозначает пустое место
pinteger
первое значение, которое нужно найти
qinteger
второе значение для поиска
Возвращаетinteger
значение самого глубокого узла, в поддереве которого находятся и p, и q

Ограничения

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

Примеры

Ввод
tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]p = 3q = 15
Вывод
8
Пояснение
3 — левый потомок 8, а 15 находится ниже 12, справа от 8. Поднимаясь вверх от каждого из них, мы впервые встречаем узел 8, поэтому это и есть ответ; корень 20 тоже является общим предком, но находится выше.

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

challenge icon

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

Что бы ты изменил, если бы p или q могли отсутствовать в дереве, и в этом случае функция должна была возвращать -1?

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

Случай 1

Случай 2

Случай 3

Ввод

tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]
p = 3
q = 15

Ожидается

8