剑指offer 面试题25 求二叉树中和为某一路径的值

//后续遍历树
void PostfixTraverse(BiTree T){
	if(T!=NULL){
		PostfixTraverse(T->left);
		PostfixTraverse(T->right);
		std::cout<<T->key<<" ";
	}
}

//前序创建树,输入完后程序运行结束,不需要输入crtl+z结束
void CreateBiTreePrefix(BiTree &T){
	
		int value;
		std::cin>>value;
		if(value==-1)
			T=NULL;
		else{
				T=(BiTree)malloc(sizeof(BiTreeNode));
				T->key=value;
				CreateBiTreePrefix(T->left);
				CreateBiTreePrefix(T->right);
			}
		
}

//剑指offer 面试题25 求二叉树中和为某一路径的值
//程序运行结束后,currsum=0,path为空
std::vector<int> path;
int currsum=0;
void FindPathSum(BiTree T,int sum){
	if(T==NULL)
		return;
	//访问当前节点,加入路径,路径值
	path.push_back(T->key);
	currsum+=T->key;
	//如果是叶节点,并且路径上结点的值等于输入的值,打印出这条路径
	if((T->left==NULL)&&(T->right==NULL)){
		if(currsum==sum){
			std::cout<<"path :";
			std::vector<int>::const_iterator iter=path.begin();
			while(iter!=path.end()){
				std::cout<<*iter<<" ";
				++iter;
			}
			std::cout<<std::endl;	
		}
		
	}
	//如果不是叶节点,遍历它的子节点
	if(T->left){
		FindPathSum(T->left,sum);
		}
	if(T->right){
		FindPathSum(T->right,sum);
	}
	//在返回父节点之前,在路径上删除当前结点,currsum值注意也要减去当前结点的值
	currsum-=path.back();
	path.pop_back();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值