Menu
CoddyTech

Boundary Traversal of Binary Tree

Массив root хранит двоичное дерево в порядке уровней: корень находится по индексу 0, дети узла с индексом i — по индексам 2i+1 (левый) и 2i+2 (правый), -1 обозначает пустое место, а в конце могут быть дополнительные элементы -1. Лист — это узел без детей.

Верните границу против часовой стрелки, начиная с корня:

  1. Корень.
  2. Левая граница сверху вниз: начиная с левого ребёнка корня, переходите к левому ребёнку, если он есть, иначе — к правому. Остановитесь перед листом.
  3. Все листья слева направо.
  4. Правая граница снизу вверх: зеркальное отражение левой границы, начиная с правого ребёнка корня.

Ни один узел не указывается дважды, поэтому дерево из одного узла содержит только корень.

Функция

boundaryTraversal(root: integer-array) → integer-array
rootinteger-array
двоичное дерево в порядке уровней, где -1 обозначает пустое место
Возвращаетinteger-array
граничные значения, против часовой стрелки от корня

Ограничения

  • 1 ≤ root.length ≤ 32767
  • Каждый элемент root[i] равен -1 или является значением, для которого 0 ≤ root[i] ≤ 105.
  • root[0] никогда не равно -1, поэтому в дереве есть как минимум один узел.
  • Массив может оканчиваться дополнительными элементами -1, расположенными после последнего узла.
  • Оба потомка пустого места тоже пусты, а глубина не превышает 14.
  • Значения узлов различны.

Примеры

Ввод
root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]
Вывод
[7, 3, 1, 4, 6, 8, 9]
Пояснение
После корневого узла 7 левая граница — 3: его дочерний узел 1 — лист. Листья — 1, 4, 6, 8. Правая граница — 9, над листом 8.
challenge icon

Дополнительный вопрос

Как бы ты перечислил границу по часовой стрелке: корень, правый край сверху вниз, листья справа налево, затем левый край снизу вверх?

Сбросить код
def boundaryTraversal(root):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргумент

root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]

Ожидаемый вывод

[7, 3, 1, 4, 6, 8, 9]