題目:
給你二叉樹的根節點?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)}
}