# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.res = []
self.target = 0
def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
self.target = sum
self.func(root,[],0)
return self.res
def func(self,node,cur_input,cur_res):
if node == None:
return None
if node.left == None and node.right == None and cur_res + node.val == self.target:
self.res.append(cur_input + [node.val])
else:
if node.left != None:
self.func(node.left,cur_input+[node.val],cur_res+node.val)
if node.right != None:
self.func(node.right,cur_input+[node.val],cur_res+node.val)
逐层递归(对自己的左右孩子)并累加结果,
累加结束后
可能出现下面三种结果
1、自己的左孩子是None
此时递归自己的右孩子即可
因为即便此时已经达到res,不可以在此时就停止,因为此时的自己并不一定是叶子结点
在这种情况下 只有当右孩子也是None的时候 才可以成功计入结果
2、自己的右孩子是None
此时递归自己的左孩子即可
3、左右孩子都不是None
分别递归
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.res = []
self.target = 0
def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
self.target = sum
self.func(root,[],0)
return self.res
def func(self,node,cur_input,cur_res):
if node == None:
if cur_res == self.target and cur_input != []:
self.res.append(cur_input)
else:
cur_res += node.val
if node.left == None:
#(node.left == None and node.right != None) or (node.left == None and node.right == None):
self.func(node.right,cur_input+[node.val],cur_res)
elif node.right == None:
#node.left != None and node.right == None:
self.func(node.left,cur_input+[node.val],cur_res)
else:
self.func(node.left,cur_input+[node.val],cur_res)
self.func(node.right,cur_input+[node.val],cur_res)