在二元树中找出和为某一值的所有路径

本文介绍了一种在二元树中查找所有节点之和等于指定值的路径的算法实现。通过递归方法,该程序能够从树的根节点遍历到叶子节点,输出所有符合条件的路径。

题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。

比较纠结,整了半天非递归算法,就是没搞明白,哎,最后还是用了递归的方法,好吧....算法比较简单....

//在二元树中找出和为某一值的所有路径
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
struct treenode{
	int data;
	treenode *l;
	treenode *r;
};
void createtree(treenode *&tree){
	tree=new treenode;
	tree->data=10;
	tree->l=new treenode;
	tree->l->data=5;
	tree->l->l=new treenode;
	tree->l->l->data=4;
	tree->l->l->l=NULL;
	tree->l->l->r=NULL;
	tree->l->r=new treenode;
	tree->l->r->data=7;
	tree->l->r->l=NULL;
	tree->l->r->r=NULL;

	tree->r=new treenode;
	tree->r->data=12;
	tree->r->l=NULL;
	tree->r->r=NULL;
}
void Print(vector<int> &path){              //输出路径
	for(vector<int>::iterator iter=path.begin();iter!=path.end();iter++){
		cout<<*iter<<" ";
	}
	cout<<endl;
}
void find(treenode *tree,int cursum,const int sum,vector<int> path){ //递归寻找
	if(tree){
		cursum+=tree->data;
		path.push_back(tree->data);
		if(cursum==sum){Print(path);}
		find(tree->l,cursum,sum,path);
		find(tree->r,cursum,sum,path);
		cursum-=tree->data;      //晕,一开始忘加了....递归的回溯
		path.pop_back();
	}
}
int main(void){
	treenode *tree;
	vector<int> path;
	createtree(tree);
	int sum;
	cin>>sum;
	find(tree,0,sum,path);
	system("pause");
	return 0;
}

转载于:https://www.cnblogs.com/aLittleBitCool/archive/2011/01/17/1937776.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值