思路:前缀和+递归+回溯

  1. unordered_map<int, int> m;
  2. int ans = 0;
  3. int pathSum(TreeNode* root, int sum) {
  4. if(!root)return 0;
  5. m[0] = 1;
  6. dfs(root, sum, 0);
  7. return ans;
  8. }
  9. void dfs(TreeNode *node, int sum, int num){
  10. if(!node)return;
  11. num += node->val;
  12. if(m.count(num - sum))ans += m[num - sum];
  13. ++m[num];
  14. dfs(node->left, sum, num);
  15. dfs(node->right, sum, num);
  16. --m[num];
  17. }