网址:leetcode-cn.com/problems/6e…
思路:假设节点A到节点B值之和是targetSum;根结点到节点A的值之和是a,根结点到节点B值之和是b,那么a+targetSum==b。通过dfs和unordered_map,记录下根结点 到 这个特定节点的祖先节点 的值,就可以得到是否有满足该条件的路径了,也可以得到有几个满足该条件的路径了。
错误:错了1次,在unordered_map中要提前把mp[0]=1设置一下,不然过不了,还是要细心
代码:
class Solution {
public:
#define LL long long
unordered_map<int,int> mp;
int cnt;
void dfs(TreeNode* root, int val, int targetSum) {
if(mp.count(val-targetSum)) {
cnt+=mp[val-targetSum];
}
++mp[val];
if(root->left) {
dfs(root->left,val+root->left->val,targetSum);
}
if(root->right) {
dfs(root->right,val+root->right->val,targetSum);
}
--mp[val];
}
int pathSum(TreeNode* root, int targetSum) {
mp.clear();
mp[0]=1;
cnt=0;
if(root==nullptr) {
return cnt;
} else (root!=nullptr) {
dfs(root,root->val,targetSum);
}
return cnt;
}
};