```
class Solution {
public:
int pathSum(TreeNode* root, int sum) {
if(root == NULL) return 0;
dfs(root, sum); //start at the root, end at anywhere
if(root->left) pathSum(root->left, sum); //nums of paths at root->left
if(root->right) pathSum(root->right, sum); //nums of paths at root->right
return result;
}
private:
int result = 0;
void dfs(TreeNode* root, int sum) {
if(root == NULL) return;
if(root->val == sum) ++result;
if(root->left) dfs(root->left, sum - root->val);
if(root->right) dfs(root->right, sum - root->val);
}
};
```