Ctrl K

Дерево по связям «родитель — ребёнок»

Средняя
Двоичное дерево с попарно различными значениями узлов описано списком связей links. Каждая связь [parent, child, side] означает, что узел со значением child — ребёнок узла parent: - если side == 1, это левый ребёнок; - если side == 0, это правый ребёнок. Каждое ребро дерева описано ровно одной связью, а связи идут в произвольном порядке. Восстановите дерево и верните его корень.
Пример 1
links=[[7, 3, 0], [12, 7, 1], [12, 9, 0], [3, 5, 1]] → [12, 7, 9, None, 3, None, None, 5]

Значение 12 ни разу не встречается как ребёнок — это корень. Слева у него 7, справа 9; у 7 справа 3, у 3 слева 5.

Пример 2
links=[[4, 8, 1]] → [4, 8]

Одна связь: корень 4 и его левый ребёнок 8.

Пример 3
links=[[2, 6, 0], [6, 1, 0], [6, 11, 1], [2, 30, 1]] → [2, 30, 6, None, None, 11, 1]
Ограничения
  • 1 ≤ len(links) ≤ 3 · 10⁴
  • links[i] = [parent, child, side]
  • 1 ≤ parent, child ≤ 10⁵, side ∈ {0, 1}
  • Связи описывают одно корректное двоичное дерево
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиДерево по прямому и симметричному обходам СредняяДерево по симметричному и обратному обходам СредняяСуммы путей в закодированном дереве СредняяДерево по прямому и обратному обходам СредняяПрямой обход дерева поиска Средняя
загружаем Python…
Вход
links=[[7, 3, 0], [12, 7, 1], [12, 9, 0], [3, 5, 1]]
Ожидается
[12, 7, 9, None, 3, None, None, 5]

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