您的位置:首页 > 其它

算法讨论(三)---在二元树中找出和为某一值的所有路径

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 path iterator class null
相关文章推荐