二叉树——和为某一值的所有路径

本文介绍了一种用于查找二叉树中满足特定条件路径的算法。该算法通过递归方式遍历二叉树,利用vector容器记录路径上的节点值,并在遇到叶子节点时检查路径总和是否等于预设值,若相等则输出该路径。

思路:

1、设置vector保存值,前序遍历二叉树,遍历一个节点,存一个值,设置cursum和sum,

2、当cursum==sum且是叶子节点,打印vector中的值

3、否则不是叶子节点,递归遍历左子树、遍历右子树,都不成立,pop容器的值



void FindPath(BiTreeNode* T,int sum)
{
	if(T == NULL)
		return;
	vector<int> ivec;
	int cursum=0;
	FindPath(T,sum, cursum,ivec);
}

void FindPath(BiTreeNode*T,int sum, int cursum,vector<int> &ivec)
{
	cursum + =T->data;
	ivec.push(T->data);

	//先看是否叶子节点
	//如果是叶子节点,且cursum == sum的,输出路径
	bool isLeaf = T->lchild == NULL&&T->rchild == NULL;
	if(isLeaf&&(cursum == sum))
	{
		vectro<int>::iterator iter = ivec.begin();
		for(;iter!=ivec.end();iter++)
			cout << *iter ;
	}
	//如果不是叶子节点,就递归遍历左子树,右子树
	if(T->lchild != NULL)
		FindPath(T->lchild,sum,cursum,ivec);
	if(T->rchild != NULL)
		FindPath(T->rchild,sum,cursum,ivec);

	//遍历到最后也不满足,返回父节点
	ivec.pop_back();
}

int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值