LeetCode | 面试题34. 二叉树中和为某一值的路径【剑指Offer】【Python】
LeetCode 面试题34. 二叉树中和为某一值的路径【剑指Offer】【Medium】【Python】【回溯】
问题
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ 4 8
/ / 11 13 4
/ \ / 7 2 5 1返回:
[ [5,4,11,2], [5,8,4,5] ]
提示:
节点总数 <= 10000
注意:本题与主站 113 题 相同。
思路
回溯
先序遍历二叉树,记录路径。 符合条件的加入 res 中。 回溯记得要删除当前节点。
时间复杂度: O(n),n 为二叉树节点个数。
空间复杂度: O(n),最坏情况,二叉树退化成单链表。
Python3代码
# 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]]:
res, path = [], []
# 先序遍历:根左右
def recur(root, target):
if not root:
return
path.append(root.val)
target -= root.val
# 找到路径
if target == 0 and not root.left and not root.right:
res.append(list(path)) # 复制了一个 path 加入到 res 中,这样修改 path 不影响 res
recur(root.left, target)
recur(root.right, target)
# 向上回溯,需要删除当前节点
path.pop()
recur(root, sum)
return resGitHub链接
相关推荐
summerinsist 2020-08-21
87901735 2020-08-19
benico 2020-08-19
Rain 2020-08-15
RemixGdc 2020-08-15
Jaystrong 2020-08-02
KFLING 2020-08-01
zhangll00 2020-07-29
elitechen 2020-07-28
suosuo 2020-07-28
benico 2020-07-28
xiyoukeke 2020-07-28
小惠 2020-07-27
此处省略三千字 2020-07-20
泥淖 2020-07-19
安得情怀似旧时 2020-07-06
sunzhihaofuture 2020-07-04