欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

刷题---树篇---113. 路径总和 II

程序员文章站 2022-05-20 11:21:07
...

113. 路径总和 II

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

说明: 叶子节点是指没有子节点的节点。

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-sum-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


相似问题:

刷题---树篇---112. 路径总和

思路:

回溯法+dfs,对树进行前序遍历,用中间数组t保存沿途路径值,符合条件就加到结果数组res中:

代码:

func pathSum(root *TreeNode, sum int) [][]int {
    res := make([][]int,0)
    if root == nil {
        return res
    }

    t := make([]int,0)
    run(root,sum,&res,t)
    return res
}

func run(root *TreeNode,sum int,res *[][]int,t []int) {
    if root == nil {
        return
    }
    t = append(t,root.Val)
    if root.Left == nil && root.Right == nil {
        if sum-root.Val == 0 {
            l := make([]int,len(t))
            //这是根据go语言的特点,必须新开一个切片进行值复制
            //要不然将原切片t放到res中,后续遍历结果也会修改res的值
            copy(l,t)
            *res = append(*res,l)
        }
        return
    }
    run(root.Left,sum-root.Val,res,t)
    run(root.Right,sum-root.Val,res,t)
}

注意:

用go切片是一个引用类型。