# LeetCode: 437. Path Sum III

## 题目¶

You are given a binary tree in which each node contains an integer value.

Find the number of paths that sum to a given value.

The path does not need to start or end at the root or a leaf, but it must go downwards (traveling only from parent nodes to child nodes).

The tree has no more than 1,000 nodes and the values are in the range -1,000,000 to 1,000,000.

Example:

```root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8

10
/  \
5   -3
/ \    \
3   2   11
/ \   \
3  -2   1
```

Return 3. The paths that sum to 8 are:

```1.  5 -> 3
2.  5 -> 2 -> 1
3. -3 -> 11
```

## 解法¶

```# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
def __init__(self):
self._count = 0

def pathSum(self, root, target_sum):

self._preorder(root, target_sum)

return self._count

def _preorder(self, root, target_sum):
if root is None:
return 0

if root.val == target_sum:
self._count += 1

new_sum = target_sum - root.val

self._preorder(root.left, new_sum)
self._preorder(root.right, new_sum)
```

```# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
def __init__(self):
self._count = 0

def pathSum(self, root, target_sum):
if root is None:
return 0

self._preorder(root, target_sum)

self.pathSum(root.left, target_sum)
self.pathSum(root.right, target_sum)

return self._count

def _preorder(self, root, target_sum):
if root is None:
return 0

if root.val == target_sum:
self._count += 1

new_sum = target_sum - root.val

self._preorder(root.left, new_sum)
self._preorder(root.right, new_sum)
```