思路:
對於二叉樹中的某一節點,
如果是葉子節點,將其加入到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;
}