回溯
def hasPathSum(self, root, targetSum):
"""
:type root: TreeNode
:type targetSum: int
:rtype: bool
"""
def backtrack(root,targetSum):
if not root:
return
targetSum -= root.val
if not root.left and not root.right and targetSum == 0:
return True
if backtrack(root.left,targetSum):
return True
if backtrack(root.right,targetSum):
return True
return backtrack(root,targetSum)
dfs
def hasPathSum(self, root, targetSum):
"""
:type root: TreeNode
:type targetSum: int
:rtype: bool
"""
if not root:
return False
if not root.right and not root.left and targetSum == root.val:
return True
return self.hasPathSum(root.left,targetSum-root.val) or self.hasPathSum(root.right,targetSum-root.val)
BFS
def hasPathSum(self, root, targetSum):
"""
:type root: TreeNode
:type targetSum: int
:rtype: bool
"""
if not root:
return 0
stack = [(root,root.val)]
while stack:
for i in range(len(stack)):
x,sum1 = stack.pop(0)
if not x.left and not x.right and sum1 == targetSum:
return True
if x.left:
stack.append((x.left,sum1+x.left.val))
if x.right:
stack.append((x.right,sum1+x.right.val))
return False