Ctrl K

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

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

Последний в обратном обходе — 6, это корень. В симметричном слева от 6 стоят [4, 8, 2] — левое поддерево, справа [5] — правое. В левом поддереве корень 8 (последний из 4, 2, 8), его дети 4 и 2.

Пример 2
inorder_vals=[1, 2, 3], postorder_vals=[3, 2, 1] → [1, None, 2, None, 3]

Корень 1, слева от него в симметричном обходе ничего нет — всё уходит вправо: цепочка 1 → 2 → 3.

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

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