Это часть моей серии, где я замечу, учится у LeetCode. Если у вас есть лучшие решения или идеи, пожалуйста, оставьте комментарий!
Проблемы
Учитывая двоичное дерево и сумму, определите, имеет ли дерево путь к корне-лифу>, чтобы добавление всех значений вдоль пути равняется данной> сумме.
Примечание: лист – это узел без детей.
Пример:
Учитывая приведенное ниже двоичное дерево и,
5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1
Верните True, так как существует путь к корню к листью 5-> 4-> 11-> 2, что сумма> 22.
Мы хотим знать сумму значения маршрута от корня до листа. В приведенном выше примере корень составляет 5, а листья – 13, 7, 2 и 1, поэтому мы должны проверить маршрут 5->8->13
, 5->4->11->7
, 5->4->11->2
и 5-> 8-> 4-> 1
.
Подход
Мы собираемся проверить четыре маршрута от BFS (первый поиск в ширине). В приведенном выше примере порядок BFS составляет [5, 4, 8, 11, 13, 4, 7, 2, 1].
Мы можем получить сумму значения маршрута, добавив значение узла к значению его детей. Это говорит о том, что когда стоимость корня составляет 5, а ценности детей – 4 и 8, мы делаем дети детей 9 и 13, добавляя значение корня и повторяя его, пока ребенок не станет листом.
Решение
from collections import deque class Solution: def hasPathSum(self, root: TreeNode, sum: int) -> bool: if root is None: return False queue = deque([root,]) while queue: node = queue.popleft() if node.left is not None: node.left.val += node.val queue.append(node.left) if node.right is not None: node.right.val += node.val queue.append(node.right) if node.right is None and node.left is None and node.val == sum: return True return False
Спасибо, что прочитали эту статью! Я всегда приветствую ваши отзывы, вопрос и идею.
Оригинал: “https://dev.to/shoryu/path-sum-4hd9”