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

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切片是一个引用类型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章