Ctrl K

Самый тяжёлый путь в дереве

Сложная
Дан корень root двоичного дерева, в вершинах которого записаны целые числа (возможно, отрицательные). Путём назовём последовательность вершин, в которой каждые две соседние соединены ребром и ни одна вершина не повторяется. Путь может начинаться и заканчиваться в любых вершинах, проходить через корень не обязан и может состоять из одной вершины. Вес пути — сумма значений его вершин. Верните наибольший вес непустого пути.
Пример 1
root=tree_node([4, -7, 5, 3, 2, None, 6]) → 15

Лучше всего путь 5 → 6 вместе с корнем: 4 + 5 + 6 = 15. Заходить в левое поддерево невыгодно: -7 + 3 = -4.

Пример 2
root=tree_node([-2, 8, 1, 3, -1]) → 11

Путь может не проходить через корень: 3 → 8 даёт 11, а добавление корня -2 и вершины 1 даёт меньше.

Пример 3
root=tree_node([-5, -9]) → -5

Все значения отрицательные, поэтому лучший путь — одна вершина -5.

Ограничения
  • 1 ≤ число вершин ≤ 3·10⁴
  • -1000 ≤ Node.val ≤ 1000
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиМинимум охранников на дереве СложнаяСамое тяжёлое поддерево поиска СложнаяСамое большое поддерево поиска СредняяКорпоратив без прямых начальников СредняяСпуск зигзагом Средняя
загружаем Python…
Вход
root=tree_node([4, -7, 5, 3, 2, None, 6])
Ожидается
15

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 99 тестов на сервере, включая скрытые.