template <class T>
void BiTree<T>::Creat(BiNode<T> * root,int i1,int i2,int k)
{//root为当前根结点,i1,i2分别为前序和中序序列的起始下标,k为序列长度
int m=0,llen=0,rlen=0;
if(k<=0)root=NULL;//建立空树
else
{
root=new BiNode<T>;
root->data=pre[i1]; //根结点为前序序列中的起始结点
m=Find(pre[i1],pin,i2);//从中序序列pin的i2开始,查找值为pre[i1]的位置
llen=m-i2; //求左子树的长度
rlen=k-(llen+1); //求右子树的长度,由于下标从i2开始,因此llen要+1
Creat(root->lchild,i1+1,i2,llen); //递归建立左子树
Creat(root->rchild,i1+llen+1,m+1,rlen);//递归建立右子树
}
}
构造函数如下:
template <class T> //有参构造函数,通过前序和中序序列建立二叉树
BiTree<T>:: BiTree(int i1,int i2,int k)
{
Creat(this->root,i1,i2,k);
}
回首忆惘然