36 lines
656 B
Go
36 lines
656 B
Go
package q437
|
|
|
|
type TreeNode struct {
|
|
Val int
|
|
Left *TreeNode
|
|
Right *TreeNode
|
|
}
|
|
|
|
func count(node *TreeNode, prefix []int, target int) int {
|
|
if node == nil {
|
|
return 0
|
|
}
|
|
if len(prefix) > 0 {
|
|
prefix = append(prefix, node.Val+prefix[len(prefix)-1])
|
|
} else {
|
|
prefix = append(prefix, node.Val)
|
|
}
|
|
|
|
cnt := 0
|
|
for i := range len(prefix) - 1 {
|
|
if prefix[len(prefix)-1]-prefix[i] == target {
|
|
cnt++
|
|
}
|
|
}
|
|
if prefix[len(prefix)-1] == target {
|
|
cnt++
|
|
}
|
|
|
|
return cnt + count(node.Left, prefix, target) + count(node.Right, prefix, target)
|
|
}
|
|
|
|
func pathSum(root *TreeNode, targetSum int) int {
|
|
return count(root, nil, targetSum)
|
|
}
|
|
|
|
var _ = pathSum
|