Ctrl K

Связи складываются в одно дерево

Средняя
Есть n узлов с номерами от 0 до n - 1. Для каждого узла i записано, кто его левый ребёнок — left[i], и кто правый — right[i]. Значение -1 означает, что ребёнка с этой стороны нет. Значений у узлов нет, важны только номера. Верните True, если эти связи образуют ровно одно корректное двоичное дерево, в которое входят все n узлов, и False иначе.
Пример 1
n=5, left=[3, 2, -1, -1, -1], right=[1, 4, -1, -1, -1] → True

Корень 0, у него дети 3 и 1, у узла 1 дети 2 и 4. Все пять узлов в одном дереве.

Пример 2
n=3, left=[1, -1, -1], right=[-1, -1, -1] → False

Узел 2 ни с кем не связан: получается два дерева, а не одно.

Пример 3
n=3, left=[1, 2, -1], right=[2, -1, -1] → False

У узла 2 два родителя — 0 и 1, в дереве так быть не может.

Ограничения
  • 1 ≤ n ≤ 10⁴
  • len(left) == len(right) == n
  • -1 ≤ left[i], right[i] ≤ n - 1
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиОткрытые комнаты от холла СредняяДерево глазами наблюдателя справа СредняяСкладываются ли связи в дерево СредняяДерево по столбцам СредняяСколько изолированных групп в сети Средняя
загружаем Python…
Вход
n=5, left=[3, 2, -1, -1, -1], right=[1, 4, -1, -1, -1]
Ожидается
True

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 140 тестов на сервере, включая скрытые.