Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
For example:
Given the below binary tree and
Given the below binary tree and
sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2
which sum is 22.
解法: 使用递归。在例子中,存在一个从root出发的,sum=22的路径 <=> 存在从4出发的,sum=22-4的路径 or 存在从8出发的,sum=22-8的路径
1 class Solution(object): 2 def hasPathSum(self, root, sum): 3 """ 4 :type root: TreeNode 5 :type sum: int 6 :rtype: bool 7 """ 8 9 if not root: 10 return False 11 elif root.val == sum and not root.left and not root.right: 12 return True 13 else: 14 return self.hasPathSum(root.right, sum - root.val) or self.hasPathSum(root.left, sum - root.val)
也可以使用DFS+backtracking
1 class Solution(object): 2 def hasPathSum(self, root, s): 3 """ 4 :type root: TreeNode 5 :type sum: int 6 :rtype: bool 7 """ 8 if not root: 9 return False 10 11 res = [] 12 self.dfs(root, s, [root.val], res) 13 return any(res) 14 15 def dfs(self, root, s, path, res): 16 17 if not root.left and not root.right and sum(path) == s: 18 res.append(True) 19 20 if root.right: 21 self.dfs(root.right, s, path+[root.right.val], res) 22 if root.left: 23 self.dfs(root.left, s, path+[root.left.val], res) 24 25