剑指 Offer II 050. 向下的路径节点之和

105 阅读1分钟

网址:leetcode-cn.com/problems/6e…

image.png

思路:假设节点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;
    }
};