Ctrl K

Контур дерева против часовой стрелки

Средняя
Дан корень root двоичного дерева. Обойдите его контур против часовой стрелки, начиная с корня, и верните значения вершин в порядке обхода. Контур складывается из четырёх частей, которые идут подряд: 1. **Корень.** 2. **Левый край** — путь, который начинается с левого ребёнка корня. От каждой вершины пути идём к её левому ребёнку, а если его нет — к правому. Путь обрывается перед первым листом: сам лист в левый край не входит. Если у корня нет левого ребёнка, левый край пуст. 3. **Все листья** дерева слева направо. Лист — вершина без детей; корень листом не считается, даже если он единственная вершина. 4. **Правый край** в обратном порядке, снизу вверх. Он устроен зеркально левому: начинается с правого ребёнка корня, идёт к правому ребёнку, а если его нет — к левому, и тоже обрывается перед листом. Каждая вершина попадает в ответ один раз.
Пример 1
root=tree_node([5, 8, 2, None, 4, 7, 9, 1, 6]) → [5, 8, 4, 1, 6, 7, 9, 2]

Корень 5. Левый край: 8 (левого ребёнка нет, идём вправо к 4), 4 (дальше влево к 1, а 1 — лист). Листья слева направо: 1, 6, 7, 9. Правый край — только 2 (дальше идёт лист 9). Итог: [5, 8, 4, 1, 6, 7, 9, 2].

Пример 2
root=tree_node([3, None, 10, 11, None, 12]) → [3, 12, 11, 10]

Левого поддерева нет, поэтому левый край пуст. Единственный лист — 12. Правый край сверху вниз: 10, 11; в ответ он идёт снизу вверх.

Пример 3
root=tree_node([42]) → [42]

Дерево из одного корня: ответ — только он.

Ограничения
  • 1 ≤ число вершин ≤ 10⁴
  • -1000 ≤ Node.val ≤ 1000
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЭто дерево поиска? СредняяДве перепутанные вершины СредняяВсе пути до листьев с заданной суммой СредняяДерево в правую цепочку СредняяСумма чисел на ветвях Средняя
загружаем Python…
Вход
root=tree_node([5, 8, 2, None, 4, 7, 9, 1, 6])
Ожидается
[5, 8, 4, 1, 6, 7, 9, 2]

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