Medium
Given the root
of a binary tree and an integer targetSum
, return the number of paths where the sum of the values along the path equals targetSum
.
The path does not need to start or end at the root or a leaf, but it must go downwards (i.e., traveling only from parent nodes to child nodes).
Example 1:
Input: root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
Output: 3
Explanation: The paths that sum to 8 are shown.
Example 2:
Input: root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
Output: 3
Constraints:
[0, 1000]
.-109 <= Node.val <= 109
-1000 <= targetSum <= 1000
import com_github_leetcode.TreeNode
/*
* Definition for a binary tree node.
* class TreeNode(_value: Int = 0, _left: TreeNode = null, _right: TreeNode = null) {
* var value: Int = _value
* var left: TreeNode = _left
* var right: TreeNode = _right
* }
*/
object Solution {
def pathSum(root: TreeNode, targetSum: Int): Int = {
if (root == null) return 0
pathSum(root.left, targetSum) + pathSum(root.right, targetSum) + dfsPath(root, 0, targetSum)
}
private def dfsPath(root: TreeNode, sum: Long, targetSum: Long): Int = {
if (root == null) return 0
val cumSum = sum + root.value
val counter = if (cumSum == targetSum) 1 else 0
counter + dfsPath(root.left, cumSum, targetSum) + dfsPath(root.right, cumSum, targetSum)
}
}