437.path-sum-iii.go 633 B

12345678910111213141516171819202122232425262728293031
  1. /**
  2. * Definition for a binary tree node.
  3. * type TreeNode struct {
  4. * Val int
  5. * Left *TreeNode
  6. * Right *TreeNode
  7. * }
  8. */
  9. func pathSum(root *TreeNode, sum int) (cnt int) {
  10. helper(root, []*TreeNode{}, sum, 0, &cnt)
  11. return
  12. }
  13. func helper(node *TreeNode, path []*TreeNode, sum, currSum int, cnt *int) {
  14. if node == nil {
  15. return
  16. }
  17. currSum += node.Val
  18. if currSum == sum {
  19. (*cnt)++
  20. }
  21. n := len(path)
  22. for cs, i := currSum, 0; i < n; i++ {
  23. cs -= path[i].Val
  24. if cs == sum {
  25. (*cnt)++
  26. }
  27. }
  28. helper(node.Left, append(path, node), sum, currSum, cnt)
  29. helper(node.Right, append(path, node), sum, currSum, cnt)
  30. }