二叉树(五)二叉树中某一路径之和为某一整数

思路:

对于二叉树中的某一节点,

如果是叶子节点,将其加入到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;
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值