/* 两个递归口,之间是递归先后关系 递归口的前后语句(操作)代表边走边操作(从前往后),后面的语句代表每个递归口退出都要进行操作(从后往前操作), */ class Solution { public: vector<vector<int> > ans; vector<int> path; void dfs(TreeNode* cur, int value){ if(!cur || value < 0) return; value -= cur->val; path.push_back(cur->val); if(value == 0 && !cur->left && !cur->right) ans.push_back(path); dfs(cur->left, value); dfs(cur->right, value); path.pop_back(); //两个递归出口推出递归时都会执行这一句 } vector<vector<int> > FindPath(TreeNode* root,int expectNumber) { dfs(root, expectNumber); return ans; } };