面试题34.二叉树中和为某一值的路径_hn

2020-03-25  本文已影响0人  1只特立独行的猪

题目描述

输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。

示例

示例 1:

给定如下二叉树,以及目标和 sum = 22,

              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1
返回:

[
   [5,4,11,2],
   [5,8,4,5]
]

提示:
节点总数 <= 10000

解答方法

方法一:回溯法(先序遍历+路径记录)

思路

先序遍历: 按照“根、左、右”的顺序,遍历树的所有节点。
路径记录: 在先序遍历中,当 ① 根节点到叶节点形成的路径 且 ② 路径各节点值的和等于目标值 sum 时,记录此路径。
参考:https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/solution/mian-shi-ti-34-er-cha-shu-zhong-he-wei-mou-yi-zh-5/

代码

# 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]]:
        path = []
        res = []
        def dfs(root, sum):
            if not root:
                return
            path.append(root.val)
            sum -= root.val
            if sum == 0 and not root.left and not root.right:
                res.append(path[:])
            dfs(root.left, sum)
            dfs(root.right, sum)
            path.pop()
        dfs(root,sum)
        return res

时间复杂度

O(N) : N 为二叉树的节点数,先序遍历需要遍历所有节点。

空间复杂度

O(N) : 最差情况下,即树退化为链表时,path 存储所有树节点,使用O(N) 额外空间。

上一篇下一篇

猜你喜欢

热点阅读