1、题目描述
https://leetcode-cn.com/problems/path-sum-ii/
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例: 给定如下二叉树,以及目标和 sum = 22
返回
[ [5,4,11,2], [5,8,4,5] ]
2、代码详解
递归
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def pathSum(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: List[List[int]]
"""
res = []
if not root:
return []
def helper(root, sum, tmp):
if not root:
return
if not root.left and not root.right and sum - root.val == 0:
tmp += [root.val]
res.append(tmp)
# return
helper(root.left, sum - root.val, tmp + [root.val])
helper(root.right, sum - root.val, tmp + [root.val])
helper(root, sum, [])
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, sum_: int) -> List[List[int]]:
if not root: return []
stack = [([root.val], root)]
res = []
while stack:
tmp, node = stack.pop()
if not node.right and not node.left and sum(tmp) == sum_:
res.append(tmp)
if node.right:
stack.append((tmp + [node.right.val], node.right))
if node.left:
stack.append((tmp + [node.left.val], node.left))
return res