path-sum-iii¶
Try it on leetcode
Description¶
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:
- The number of nodes in the tree is in the range
[0, 1000]
. -109 <= Node.val <= 109
-1000 <= targetSum <= 1000
Solution(Python)¶
class Solution(object):
def pathSum(self, root, sum):
def dfs(sumHash, prefixSum, node):
if not node:
return 0
# Sum of current path
prefixSum += node.val
# number of paths that ends at current node
path = sumHash[prefixSum - sum]
# add currentSum to prefixSum Hash
sumHash[prefixSum] += 1
# traverse left and right of tree
path += dfs(sumHash, prefixSum, node.left) + dfs(
sumHash, prefixSum, node.right
)
# remove currentSum from prefixSum Hash
sumHash[prefixSum] -= 1
return path
# depth first search, initialize sumHash with prefix sum of 0, occurring once
return dfs(collections.defaultdict(int, {0: 1}), 0, root)