Menu
CoddyTech

Top View of Binary Tree

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

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

Функция

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

Ограничения

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

Примеры

Ввод
root = [5, 2, 9, 4, 7, 1, 6]
Вывод
[4, 2, 5, 9, 6]
Пояснение
Слева направо в столбцах находятся 4 (столбец -2), 2 (-1), корень 5 (0), 9 (1) и 6 (2). 7 и 1 тоже находятся в столбце 0, но корень расположен выше них.
challenge icon

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

Когда вместо массива используются объекты-узлы, индекса нет, чтобы разрешить равенство. Как бы ты сформулировал правило разрешения равенства и изменится ли твой код обхода в ширину?

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

Тест #1

Тест #2

Тест #3

Аргумент

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

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

[4, 2, 5, 9, 6]