113:路径总和 II
题目:
给你二叉树的根节点 root
和一个整数目标和 targetSum
,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
解答:
用 go主要坑有两个,一个是二维结果切片传递用指针,一个是临时路径结果每次不共享切片底层数组,并且还需要注意数据顺序性。
教训:切片值传递,复制结构头,共享底层数组,可见数据可能会被改变,需要每次重新申请新切片。
/*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/import("fmt")
func pathSum(root *TreeNode, targetSum int) [][]int {if root == nil {return [][]int{}}res := make([][]int, 0)path(root, []int{root.Val}, root.Val, targetSum, &res)return res
}
func path(root *TreeNode, cur []int, sum int, targetSum int, res *[][]int) {if root.Left == nil && root.Right == nil {if sum == targetSum {*res = append(*res, cur)//fmt.Printf("----%v",res) //调试打印return}return}if root.Left != nil {curl := append([]int{}, cur... ) //顺序性curl = append(curl, root.Left.Val)path(root.Left, curl, sum+root.Left.Val, targetSum, res)}if root.Right != nil {curr := append([]int{}, cur...)curr = append(curr, root.Right.Val)path(root.Right, curr, sum+root.Right.Val, targetSum, res)}
}