Menu
CoddyTech

Lowest Common Ancestor of a Binary Tree

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

Верните значение наименьшего общего предка p и q — значений двух разных узлов: самого глубокого узла, в поддереве которого находятся оба узла. Поддерево включает свой корневой узел, поэтому, если q находится ниже p, ответ — p.

Функция

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

Ограничения

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

Примеры

Ввод
root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]p = 6q = 9
Вывод
3
Пояснение
6 — левый потомок 3, а 9 находится ниже 4, справа от 3, поэтому они встречаются в 3. Сравнение значений указывало бы на корень 8: 6 меньше, а 9 больше.
challenge icon

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

Если p или q могут отсутствовать, а ответом в таком случае должно быть -1, какой вариант оптимизации нарушается и как всё же завершить задачу за один проход?

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

Тест #1

Тест #2

Тест #3

Аргументы

root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]
p = 6
q = 9

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

3