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

题目描述

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

示例

示例 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) 额外空间。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经...
    人一己千阅读 112评论 0 0
  • 题目描述: 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节...
    周英杰Anita阅读 97评论 0 0
  • 树形结构 在前面章节中介绍到的数据结构,都为线性结构,比如链表,数组,队列等,都属于线性结构,类似于通过一根线串在...
    ducktobey阅读 1,308评论 0 0
  • 历史这个东东,有的人爱学,有的人恨之入骨。其实很多人爱上历史,都是机缘巧合。比如说一个游戏什么的,都可以“勾...
    萌橙carl阅读 1,249评论 0 2
  • 外公今天往生了。人世间的生老病死就是这么苦,你无法不让自己变老,看着生病的外公躺在床上,插着氧气瓶,难受的呼吸着,...
    zinia_菜菜阅读 236评论 0 1