34. 二叉树中和为某一值的路径【递归 回溯】

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

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

              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1

返回:

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

提示:

  • 节点总数 <= 10000

2. 解法 - 递归

2.1 Java

值得注意的是,记录路径时若直接执行 res.add(path) ,则是将 path 对象加入了 res ;后续 path 改变时, res 中的 path 对象也会随之改变。

正确做法:res.append(new LinkedList(path)) ,相当于复制了一个 path 并加入到 res 。

2.2 Kotlin

2.3 复杂度分析

  • 时间复杂度 O(N):N 为二叉树的结点数,先序遍历需要遍历所有结点。

  • 空间复杂度 O(N):最差情况下,即当树退化为链表时,path 需要存储所有结点,占用 O(N) 额外空间。

3. 参考

4. 标签

  • DFS

  • 回溯

最后更新于

这有帮助吗?