123456789101112131415161718192021222324252627282930313233343536373839404142 |
- package main
- /**
- * Definition for a binary tree node.
- * type TreeNode struct {
- * Val int
- * Left *TreeNode
- * Right *TreeNode
- * }
- */
- func pathSum(root *TreeNode, sum int) [][]int {
- result := make([][]int, 0)
- path := make([]int, 0)
- pathSumHelper(&result, &path, root, sum)
- return result
- }
- func pathSumHelper(result *[][]int, path *[]int, root *TreeNode, sum int) {
- if root == nil {
- return
- }
- *path = append(*path, root.Val)
- if root.Left == nil && root.Right == nil && root.Val == sum {
- newPath := make([]int, len(*path)) // Deep copy & pointer
- copy(newPath, *path) // Important!!!
- *result = append(*result, newPath)
- }
- pathSumHelper(result, path, root.Left, sum-root.Val)
- pathSumHelper(result, path, root.Right, sum-root.Val)
- *path = (*path)[:len(*path)-1]
- }
- // func main() {
- // // 3
- // // / \
- // // 7 -1
- // // /\ /\
- // // 1 5 9 4
- // root1 := sortedArrayToBST([]int{1, 7, 5, 3, 9, -1, 4})
- // fmt.Println(pathSum(root1, 11))
- // fmt.Println(pathSum(root1, 12))
- // }
|