二叉樹(五)二叉樹中某一路徑之和爲某一整數

思路:

對於二叉樹中的某一節點,

如果是葉子節點,將其加入到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;
}


 

 

發佈了77 篇原創文章 · 獲贊 11 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章