Menu
CoddyTech

Diameter of Binary Tree

Дано бинарное дерево, хранящееся в массиве tree в порядке уровней. Корень находится по индексу 0, дети узла с индексом i находятся по индексам 2*i+1 (левый) и 2*i+2 (правый), -1 обозначает пустое место, а в конце массива могут быть лишние элементы -1. Верните диаметр дерева: количество рёбер на самом длинном пути между любыми двумя узлами. Путь может проходить через корень или целиком находиться внутри одного поддерева.

Функция

diameterOfBinaryTree(tree: integer-array) → integer
treeinteger-array
двоичное дерево в порядке уровней, где -1 обозначает пустое место
Возвращаетinteger
количество рёбер на самом длинном пути между двумя узлами

Ограничения

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

Примеры

Ввод
tree = [8, 3, 6, 1, 4, -1, -1, -1, -1, 7]
Вывод
4
Пояснение
Путь 7, 4, 3, 8, 6 (индексы 9, 4, 1, 0, 2) содержит пять узлов, соединённых четырьмя рёбрами. Он поворачивает у корня: три ребра вниз по левой стороне и одно вниз по правой.

lock icon+12 скрытых тестов при отправке

challenge icon

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

Как вернуть сам путь — значения узлов от одного конца диаметра до другого?

Сбросить код
def diameterOfBinaryTree(tree):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

tree = [8, 3, 6, 1, 4, -1, -1, -1, -1, 7]

Ожидается

4