思路:前缀和+递归+回溯
unordered_map<int, int> m;int ans = 0;int pathSum(TreeNode* root, int sum) {if(!root)return 0;m[0] = 1;dfs(root, sum, 0);return ans;}void dfs(TreeNode *node, int sum, int num){if(!node)return;num += node->val;if(m.count(num - sum))ans += m[num - sum];++m[num];dfs(node->left, sum, num);dfs(node->right, sum, num);--m[num];}
