小黑自己的解法
class Solution:
def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
self.flag = False
if not root:
return self.flag
def list_path(root,sum_):
sum_ = root.val + sum_
if (not root.left) and (not root.right):
if sum_ == targetSum:
self.flag = True
if root.left and not self.flag :
list_path(root.left,sum_)
if root.right and not self.flag:
list_path(root.right,sum_)
list_path(root,0)
return self.flag
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b54aecc02473de461bba7447f81087f0.png)
递归法
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 targetSum == root.val
return self.hasPathSum(root.left,targetSum - root.val) or self.hasPathSum(root.right,targetSum - root.val)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/975428e0fbf503c156ce98aa31c2d48e.png)
广度优先搜索
class Solution:
def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
if not root:
return False
q_node = deque([root])
q_num = deque([root.val])
while q_node:
node = q_node.popleft()
num = q_num.popleft()
if (not node.left) and (not node.right):
if num == targetSum:
return True
continue
if node.left:
q_node.append(node.left)
q_num.append(num + node.left.val)
if node.right:
q_node.append(node.right)
q_num.append(num + node.right.val)
return False
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f38316c6c81163221fc4e2b90c922d4d.png)