113.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package main
  2. /**
  3. * Definition for a binary tree node.
  4. * type TreeNode struct {
  5. * Val int
  6. * Left *TreeNode
  7. * Right *TreeNode
  8. * }
  9. */
  10. func pathSum(root *TreeNode, sum int) [][]int {
  11. result := make([][]int, 0)
  12. path := make([]int, 0)
  13. pathSumHelper(&result, &path, root, sum)
  14. return result
  15. }
  16. func pathSumHelper(result *[][]int, path *[]int, root *TreeNode, sum int) {
  17. if root == nil {
  18. return
  19. }
  20. *path = append(*path, root.Val)
  21. if root.Left == nil && root.Right == nil && root.Val == sum {
  22. newPath := make([]int, len(*path)) // Deep copy & pointer
  23. copy(newPath, *path) // Important!!!
  24. *result = append(*result, newPath)
  25. }
  26. pathSumHelper(result, path, root.Left, sum-root.Val)
  27. pathSumHelper(result, path, root.Right, sum-root.Val)
  28. *path = (*path)[:len(*path)-1]
  29. }
  30. // func main() {
  31. // // 3
  32. // // / \
  33. // // 7 -1
  34. // // /\ /\
  35. // // 1 5 9 4
  36. // root1 := sortedArrayToBST([]int{1, 7, 5, 3, 9, -1, 4})
  37. // fmt.Println(pathSum(root1, 11))
  38. // fmt.Println(pathSum(root1, 12))
  39. // }