算法讨论(三)---在二元树中找出和为某一值的所有路径
2011-05-07 16:38
417 查看
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数22和如下二元树
10
/ /
5 12
/ /
4 7
则打印出两条路径:10, 12和10, 5, 7。
思路:递归。貌似涉及到二叉树的用递归是比较简单的方法。
template <class T>
struct node
{
T val;
node *lp;
node *rp;
node(){ lp=rp=0; }
node(const T & el,node *l=0,node *r=0):
val(el),lp(l),rp(r){};
template<class T>
void find_path(node<T> *p, T total, vector<T> &path)
{
static T sum=0;
if (p==NULL)
return ;
path.push_back(p->val);
sum+=p->val;
if (p->lp!=0)
find_path(p->lp,total,path);
if (p->rp!=0)
find_path(p->rp,total,path);
if (sum==total)
{
for (vector<T>::iterator it=path.begin();it!=path.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
path.pop_back();
sum-=p->val;
}
例如输入整数22和如下二元树
10
/ /
5 12
/ /
4 7
则打印出两条路径:10, 12和10, 5, 7。
思路:递归。貌似涉及到二叉树的用递归是比较简单的方法。
template <class T>
struct node
{
T val;
node *lp;
node *rp;
node(){ lp=rp=0; }
node(const T & el,node *l=0,node *r=0):
val(el),lp(l),rp(r){};
template<class T>
void find_path(node<T> *p, T total, vector<T> &path)
{
static T sum=0;
if (p==NULL)
return ;
path.push_back(p->val);
sum+=p->val;
if (p->lp!=0)
find_path(p->lp,total,path);
if (p->rp!=0)
find_path(p->rp,total,path);
if (sum==total)
{
for (vector<T>::iterator it=path.begin();it!=path.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
path.pop_back();
sum-=p->val;
}
相关文章推荐
- 算法面试100题——4.在二元树中找出和为某一值的所有路径
- 每天一算法(在二元树中找出和为某一值的所有路径(树))
- 每日一道算法题4——在二元树中找出和为某一值的所有路径
- 每天一道算法题(1)——在二元树中找出和为某一值的所有路径
- 微软算法100道题------在二元树中找出和为某一值的所有路径
- 算法题23 在二元树中找出和为某一值的所有路径
- 每天一道算法题(1)——在二元树中找出和为某一值的所有路径(java代码)
- 【算法】在二元树中找出和为某一值的所有路径
- 微软等数据结构+算法面试100题(45)-- 在二元树中找出和为某一值的所有路径
- 算法习题5:在二元树中找出和为某一值的所有路径
- 算法与数据结构面试题(4)-在二元树中找出和为某一值的所有路径
- 每天一道算法题(9)——在二元树中找出和为某一值的所有路径
- 每天一道算法题(9)——在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径(树)
- 在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径的个人代码
- 程序员面试题精选(04)-在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 程序员面试题100题第04题——在二元树中找出和为某一值的所有路径