class Solution {
public:
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
vector<vector<int> >res;
vector<int> path;
int sum = 0;
if(!root)
return res;
find(res, path, sum, root, expectNumber);
return res;
}
private:
void find(vector<vector<int> >&res, vector<int>&path, int &sum, TreeNode*root, int expectNumber)
{
//若结点为空,则退出,回溯
if(!root)
return;
//添加元素
path.push_back(root->val); //
sum += root->val;
//结束条件
if(sum == expectNumber && root->left == nullptr && root->right == nullptr)
{
res.push_back(path); //若找到了结果,则将结果保存起来
}
//开始递归
if(sum < expectNumber)
{
find(res, path, sum, root->left, expectNumber); //先递归其左孩子
find(res, path, sum, root->right, expectNumber); //再递归其右孩子
}
//删除该节点,并且将sum剪掉
path.pop_back();
sum -= root->val;
}
};</int></int></int></int></int>