思路:
对于二叉树中的某一节点,
如果是叶子节点,将其加入到path中,(一个vector)然后算vector中的和是否为需要的整数,如果是就打印出来,如果和不满足就退出函数,退出前pop vector;
如果不是叶子节点,直接将当前值加入到path中,再递归调用,当前节点变为当前节点的左节点,右节点
本函数的关键是在退出函数前要pop一次,(如果在该函数中push了);这样保证在递归调用结束的时候会一层一层的收缩
void BinSum(int sum,vector<int> &path,Node *cur)
{
if (cur==NULL)
{
return;
}
if(cur->left==NULL&&cur->right==NULL)
{
path.push_back(cur->val);
int Tempsum=vsum(path);
if (Tempsum==sum)
{
vprint(path);
}
}
else
{
path.push_back(cur->val);
BinSum(sum,path,cur->left);
BinSum(sum,path,cur->right);
}
path.pop_back();
}
int vsum(vector<int> &path)
{
int sum=0;
for (int i=0;i<path.size();i++)
{
sum+=path[i];
}
return sum;
}
void vprint(vector<int> &path)
{
for(int i=0;i<path.size();i++)
cout<<path[i]<<'\t';
cout<<endl;
}