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;
}
};