题目:
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
leetcode原题链接
思路:
- 深度优先搜索
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
if not root:#递归的终止条件,已越过叶子节点,当前节点为空
return []#证明该条路径不符合要求,return 空列表(此处不能return None,因为后序还要将left+right,NoneType不能相加)
if not root.left and not root.right and sum==root.val:#递归的终止条件,当前节点是叶子节点,且路径和为sum
return [[root.val]]#返回存有【当前叶子节点的值】的嵌套列表
res=[]#res中存放 符合要求的 遍历到当前root节点的路径
left=self.pathSum(root.left,sum-root.val)#在当前节点的左子树搜寻是否有符合要求的路径
right=self.pathSum(root.right,sum-root.val)#在当前节点的右子树搜寻
for i in left+right:#当前节点的左右节点均已搜寻完毕,如left=[[1]];right=[[2]];left+right=[[1],[2]],当前搜寻到i/2条路径,这两条路径均经过当前的root节点,所以我们分别将当前节点加到路径中
res.append([root.val]+i)#i=[1],res=[[4]+[1]]=[[4,1]];i=[[2]],res+=[[4]+[2]]=[[4,2]],得到res=[[4,1],[4,2]]
return res
为了便于理解,以二叉树[5,4,3,1,3,null,2]为例,sum=10
向上层return的解析
tips: