先序和中序创建二叉树
void creat(Tree &T,int f1,int f2,int n){//f1、f2分别为各个子树先序和中序序列中第一个元素的指针,n为当前二叉树中的元素个数
int k;
if(n<=0){//当树中元素为0时,结点指针赋NULL,递归返回
T=NULL;
return;
}
for(int i=f1;i<f1+n;i++){//中序序列中寻根
if(in[i]==pre[f2]){//找到则创建结点
k=i-f1;
T=new Tnode;
T->data=pre[f2];
break;
}
}
creat(T->l,f1,f2+1,k);//递归创建左子树
creat(T->r,f1+k+1,f2+k+1,n-k-1);//递归创建右子树
}
中序和后序创建二叉树
void creat(Tree &T,int f1,int f2,int n){//f1、f2分别为各个子树中序和后序序列中第一个元素的指针,n为当前二叉树中的元素个数
int k;
if(n<=0){//当树中元素为0时,结点指针赋NULL,递归返回
T=NULL;
return;
}
for(int i=f1;i<f1+n;i++){//中序序列中寻根
if(in[i]==post[f2+n-1]){//找到则创建结点
k=i-f1;
T=new Tnode;
T->data=post[f2+n-1];
break;
}
}
creat(T->l,f1,f2,k);//递归创建左子树
creat(T->r,f1+k+1,f2+k,n-k-1);//递归创建右子树
}