34. 二叉树中和为某一值的路径

https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca?tpId=13&tqId=11177&tPage=1&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&from=cyc_github&tab=answerKey

class Solution {
public:
    unordered_map<TreeNode*, int> sum;
    //unordered_map<TreeNode*, bool> vis;
    deque<int> pathnow;
    vector<vector<int>> ans;
    void dfs(TreeNode* root,int expectNumber, int sumpre){
        //vis[root] = true;
        pathnow.push_back(root->val);
        if(sum.find(root) == sum.end()){
            sum[root] = root->val + sumpre;
        }

        if(root->left == nullptr && root->right == nullptr){
            if(expectNumber == sum[root]){
                ans.push_back(vector<int>(pathnow.begin(), pathnow.end()));
            }
        }else if(root->left == nullptr){
            dfs(root->right, expectNumber, sum[root]);
        }else if(root->right == nullptr){
            dfs(root->left, expectNumber, sum[root]);
        }else{
            if(root->left->val >= root->right->val){
                dfs(root->right, expectNumber, sum[root]);
                dfs(root->left, expectNumber, sum[root]);
            }else{
                dfs(root->left, expectNumber, sum[root]);
                dfs(root->right, expectNumber, sum[root]);
            }
        }
        pathnow.pop_back();
        //vis[root] = false;
    }
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
        if(root == nullptr) return vector<vector<int>>{};
        dfs(root, expectNumber, 0);
        return ans;
    }
};
原文地址:https://www.cnblogs.com/N3ptuner/p/14588858.html