root двоичного дерева. Обойдите его контур против часовой стрелки, начиная с корня, и верните значения вершин в порядке обхода. Контур складывается из четырёх частей, которые идут подряд:
1. **Корень.**
2. **Левый край** — путь, который начинается с левого ребёнка корня. От каждой вершины пути идём к её левому ребёнку, а если его нет — к правому. Путь обрывается перед первым листом: сам лист в левый край не входит. Если у корня нет левого ребёнка, левый край пуст.
3. **Все листья** дерева слева направо. Лист — вершина без детей; корень листом не считается, даже если он единственная вершина.
4. **Правый край** в обратном порядке, снизу вверх. Он устроен зеркально левому: начинается с правого ребёнка корня, идёт к правому ребёнку, а если его нет — к левому, и тоже обрывается перед листом.
Каждая вершина попадает в ответ один раз.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].
root=tree_node([3, None, 10, 11, None, 12]) → [3, 12, 11, 10]
Левого поддерева нет, поэтому левый край пуст. Единственный лист — 12. Правый край сверху вниз: 10, 11; в ответ он идёт снизу вверх.
root=tree_node([42]) → [42]
Дерево из одного корня: ответ — только он.
Node.val ≤ 1000root=tree_node([5, 8, 2, None, 4, 7, 9, 1, 6])
[5, 8, 4, 1, 6, 7, 9, 2]
«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 100 тестов на сервере, включая скрытые.