Menu
CoddyTech

Vertical Order Traversal of a Binary Tree

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

Корень находится в столбце 0; левый дочерний узел находится на один столбец левее родительского, а правый — на один столбец правее. Верни по одному списку для каждого столбца, слева направо. В каждом столбце перечисли узлы сверху вниз, а узлы, находящиеся в одном столбце и на одной глубине, — в порядке возрастания значений.

Функция

verticalTraversal(root: integer-array) → integer-2d-array
rootinteger-array
дерево в порядке кучи, с -1 для пустого места
Возвращаетinteger-2d-array
по одному списку значений для каждого столбца, начиная с крайнего левого; в каждом — сверху вниз

Ограничения

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

Примеры

Ввод
root = [5, 2, 9, 4, 7, 1, 6]
Вывод
[[4], [2], [5, 1, 7], [9], [6]]
Пояснение
В столбце 0 находится корень 5, а двумя уровнями ниже — 7 и 1. Эти два узла находятся в одном столбце и на одной глубине, поэтому 1 идёт перед 7, хотя 7 расположен левее.
challenge icon

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

Каждое значение не превышает 5000. Можешь воспользоваться этим, чтобы отказаться от сортировки сравнением и выполнить задачу за O(n + 5000)?

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

Тест #1

Тест #2

Тест #3

Аргумент

root = [5, 2, 9, 4, 7, 1, 6]

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

[[4], [2], [5, 1, 7], [9], [6]]