Ctrl K

Дерево по прямому и симметричному обходам

Средняя
У двоичного дерева с различными значениями в вершинах записали два обхода: - preorder_vals — прямой обход: сначала вершина, затем её левое поддерево, затем правое; - inorder_vals — симметричный обход: левое поддерево, затем вершина, затем правое поддерево. Восстановите дерево и верните его корень. Гарантируется, что оба списка получены из одного и того же дерева.
Пример 1
preorder_vals=[5, 3, 1, 4, 8], inorder_vals=[1, 3, 4, 5, 8] → [5, 3, 8, 1, 4]

Первый в прямом обходе — 5, это корень. В симметричном слева от 5 стоят [1, 3, 4], справа [8]. Левое поддерево начинается с 3 (следующий в прямом обходе), у него дети 1 и 4.

Пример 2
preorder_vals=[10, 20, 30], inorder_vals=[30, 20, 10] → [10, 20, None, 30]

Каждая следующая вершина стоит в симметричном обходе левее предыдущей — цепочка влево: 10 → 20 → 30.

Пример 3
preorder_vals=[0], inorder_vals=[0] → [0]
Ограничения
  • 1 ≤ len(preorder_vals) ≤ 3000
  • len(inorder_vals) = len(preorder_vals)
  • -3000 ≤ значения ≤ 3000
  • Все значения различны
  • Оба списка — обходы одного и того же дерева
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиДерево по симметричному и обратному обходам СредняяДерево по прямому и обратному обходам СредняяДерево из вершин-максимумов СредняяСуммы путей в закодированном дереве СредняяДерево по связям «родитель — ребёнок» Средняя
загружаем Python…
Вход
preorder_vals=[5, 3, 1, 4, 8], inorder_vals=[1, 3, 4, 5, 8]
Ожидается
[5, 3, 8, 1, 4]

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