| 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))
 
- // }
 
 
  |