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, target: int) -> List[List[int]]:
if not root:
return []
stack = [(root,[root.val])]
res = []
while stack :
r,path = stack.pop()
if not r.left and not r.right and sum(path)==target:
res.append(path)
if r.left:
stack.append((r.left,path+[r.left.val]))
if r.right:
stack.append((r.right,path+[r.right.val]))
return res
方法二:递归
# 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, target: int) -> List[List[int]]:
if not root:
return []
res = []
def path(r,tmp):
if not r.left and not r.right and sum(tmp)==target:
res.append(tmp)
if r.left:
path(r.left,tmp+[r.left.val])
if r.right:
path(r.right,tmp+[r.right.val])
path(root,[root.val])
return res