求教!!!!
有以下程序,我实在是弄不明白递归创建的具体过程是怎样的,请各位大哥不吝指教,把递归创建的过程讲一下比如说 输入序列:1 2 3 -1 -1 -1 4 5 -1 -1 6 -1 -1
template <class T>
void BinaryTree<T>::CreateBiTree(T end)
{ //创建一棵二叉树:先序序列的顺序输入数据,end为结束的标志
cout<<"请按先序序列的顺序输入二叉树,-1为空指针域标志:"<<endl;
BTNode<T>*p;
T x;
cin>>x; //输入根结点的数据
if(x==end) return ; //end 表示指针为空,说明树为空
p=new BTNode<T>; //申请内存
if(!p)
{
cout<<"申请内存失败!"<<endl;
exit(-1);//申请内存失败退出
}
p->data=x;
p->lchild=NULL;
p->rchild=NULL;
BT=p; //根结点
create(p,1,end);//创建根结点左子树,1为标志,表示左子树
create(p,2,end);//创建根结点右子树,2为标志,表示右子树
}
template <class T>
static int create(BTNode<T>*p,int k,T end)
{//静态函数,创建二叉树,k为创建左子树还是右子树的标志,end为空指针域的标志
BTNode<T>*q;
T x;
cin>>x;
if(x!=end)
{ //先序顺序输入数据
q=new BTNode<T>;
q->data=x;
q->lchild=NULL;
q->rchild=NULL;
if(k==1) p->lchild=q; //q为左子树
if(k==2) p->rchild=q; //p为右子树
create(q,1,end); //递归创建左子树
create(q,2,end); //递归创建右子树
}
return 0;
}