思路:若当前节点就是叶子节点,那么我们直接判断 sum 是否等于 val 即可。若当前节点不是叶子节点,我们只需要递归地询问它的子节点是否能满足条件即可。
# 递归
class Solution:
def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
if not root:
return False
if not root.left and not root.right:
return root.val == targetSum
return self.hasPathSum(root.left, targetSum - root.val) \
or self.hasPathSum(root.right, targetSum - root.val)
# 广度优先搜索
class Solution:
def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
if not root:
return False
queue_node = collections.deque([root])
queue_val = collections.deque([root.val])
while queue_node:
now = queue_node.popleft()
temp = queue_val.popleft()
if not now.left and not now.right:
if temp == targetSum:
return True
continue
if now.left:
queue_node.append(now.left)
queue_val.append(now.left.val + temp)
if now.right:
queue_node.append(now.right)
queue_val.append(now.right.val + temp)
return False