1、递归
#class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def hasPathSum(self, root: TreeNode, sum: int) -> bool:
if not root: return False
sum -= root.val
if not root.left and not root.right:
return sum == 0
return self.hasPathSum(root.left, sum) or self.hasPathSum(root.right, sum)
2、迭代
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def hasPathSum(self, root: TreeNode, sum: int) -> bool:
if not root: return False
stack = [(root, sum - root.val)]
while stack:
cur_node, cur_sum = stack.pop()
if not cur_node.left and not cur_node.right and cur_sum == 0:
return True
if cur_node.left:
stack.append((cur_node.left, cur_sum - cur_node.left.val))
if cur_node.right:
stack.append((cur_node.right, cur_sum - cur_node.right.val))
return False