给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
思路:
要找出所有正确路径,我们就要遍历所有的路径,所有使用深度优先算法
递归算法:
1.参数:当前节点 root,本路径的记录 l,现路径值和 m
2.基例:当是叶子节点,并且路径值和 m 等于sum时。将记录的路径 l 保存到总列表中
3.否则:如果有左孩子遍历左孩子,如果有右孩子遍历右孩子
代码:
class Solution:
def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
#类属性,在递归时充当全局遍历
self.sum=sum
self.d=[]
def dg(root,l,m):
#加上此节点值,记录本结点
m+=root.val
l.append(root.val)
#符合条件,保存路径,返回
if not root.left and not root.right and m==self.sum:
self.d.append(l)
return
#遍历左右孩子
if root.left:
dg(root.left,l.copy(),m)
if root.right:
dg(root.right,l.copy(),m)
#空列表
if not root:
return []
dg(root,[],0)
return self.d