没什么新意,就是在遍历到叶子节点的时候把一个结果存入结果集中,注意恢复临时结果。
void pathSumRecursive(TreeNode *root,int sum,vector<int> &oneresult,vector<vector<int> > &ret)
{
if (root->left==NULL&&root->right!=NULL)
{
oneresult.push_back(root->val);
pathSumRecursive(root->right,sum - root->val,oneresult,ret);
oneresult.pop_back();
}
else
{
if (root->left!=NULL&&root->right==NULL)
{
oneresult.push_back(root->val);
pathSumRecursive(root->left,sum - root->val,oneresult,ret);
oneresult.pop_back();
}
else
{
if (root->left!=NULL&&root->right!=NULL)
{
oneresult.push_back(root->val);
pathSumRecursive(root->left,sum - root->val,oneresult,ret);
oneresult.pop_back();
oneresult.push_back(root->val);
pathSumRecursive(root->right,sum - root->val,oneresult,ret);
oneresult.pop_back();
}
else
{
if(sum == root->val)
{
oneresult.push_back(root->val);
ret.push_back(oneresult);
oneresult.pop_back();
}
else
return ;
}
}
}
}
vector<vector<int> > pathSum(TreeNode *root, int sum) {
vector<int> temp;
vector<vector<int> > ret;
if(root==NULL)
return ret;
pathSumRecursive(root,sum,temp,ret);
return ret;
}