Ctrl K

Один разрез пополам

Средняя
Дан корень root двоичного дерева. Можно ли удалить ровно одно ребро так, чтобы дерево распалось на две части с одинаковой суммой значений вершин? Верните True, если такое ребро есть, иначе False.
Пример 1
root=tree_node([1, 8, 3, None, None, 2, 2]) → True

Режем ребро между корнем и вершиной 8: в одной части 8, в другой 1 + 3 + 2 + 2 = 8.

Пример 2
root=tree_node([0, -2, 2]) → False

Общая сумма 0, но отрезать можно только поддерево -2 или поддерево 2, и ни одно из них не даёт половину, то есть 0.

Пример 3
root=tree_node([5]) → False

Рёбер нет — разрезать нечего.

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

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