输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数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;
}