class Solution(object):
def hasPathSum(self, root, targetSum):
if root==None:
return False
if root!=None and root.left==None and root.right==None and targetSum==root.val:
return True
b1=self.hasPathSum(root.left,targetSum-root.val)
b2=self.hasPathSum(root.right,targetSum-root.val)
return b1 or b2
思路:
- 如果根节点为空,直接返回。
- 要有一个记录路径的数组 path,每遍历一个节点就将节点的值加入路径 path 中。
- 如果遍历到叶子节点时满足条件,就将 path 加入结果中。
- 依次递归根节点的左孩子、右孩子,弹出 path 的第一个元素(回溯)。
class Solution(object):
def reNode(self,root,targetSum,path,arr):
if root==None:
return
path.append(root.val)
if root!=None and root.left==None and root.right==None and targetSum==root.val:
arr.append(list(path))
self.reNode(root.left,targetSum-root.val,path,arr)
self.reNode(root.right,targetSum-root.val,path,arr)
path.pop()
def pathSum(self, root, targetSum):
arr=[]
path=[]
self.reNode(root,targetSum,path,arr)
return arr