Ctrl K

Разрез дерева с лучшим произведением

Средняя
Дан корень root двоичного дерева, в узлах которого записаны положительные числа. Удалите ровно одно ребро: дерево распадётся на две части. Посчитайте сумму значений в каждой части и перемножьте эти суммы. Верните наибольшее произведение, которое можно получить, выбрав ребро удачно. Ответ может быть большим — верните его остаток от деления на 10⁹ + 7. Сравнивать нужно настоящие произведения, остаток берётся только у итогового.
Пример 1
root=tree_node([4, 9, 2, None, None, 5, 1]) → 108

Сумма всего дерева 21. Если отрезать узел 2 вместе с его детьми 5 и 1, получатся части 8 и 13, произведение 104. Отрезать лист 9 выгоднее: 9 · 12 = 108. Остальные разрезы дают меньше, ответ 108.

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

Ребро одно: части 3 и 3, произведение 9.

Ограничения
  • В дереве от 2 до 10⁵ узлов
  • 1 ≤ Node.val ≤ 10⁴
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЭто дерево поиска? СредняяДве перепутанные вершины СредняяВсе пути до листьев с заданной суммой СредняяДерево в правую цепочку СредняяСумма чисел на ветвях Средняя
загружаем Python…
Вход
root=tree_node([4, 9, 2, None, None, 5, 1])
Ожидается
108

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