在写转换二叉树的swap()函数时发现和教材答案有所不同,为验证正确性写了如下代码测试
测试用的是一个三层满二叉树,共7个结点。给出先序和中序序列以创建二叉树。该树层次遍历顺序为ABCDEFG
BiTree PreInCreat(char A[],char B[],int l1,int h1,int l2,int h2){//创建二叉树
int i,llen,rlen;
BiTree root;
root=(BiNode*)malloc(sizeof(BiNode));
root->data=A[l1];
for(i=l2;B[i]!=root->data;i++);
llen=i-l2;
rlen=h2-i;
if(llen)
root->lchild=PreInCreat(A,B,l1+1,l1+llen,l2,l2+llen-1);
else
root->lchild=NULL;
if(rlen)
root->rchild=PreInCreat(A,B,h1-rlen+1,h1,h2-rlen+1,h2);
else
root->rchild=NULL;
return root;
}
BiTree swap(BiTree p){//交换二叉树
BiTree Temp;//Temp作为临时存储,存放即将被覆盖的lchild
if(p){
Temp=p->lchild;
p->lchild=swap(p->rchild);
p->rchild=swap(Temp);
return p;
}
else return NULL;
}
void InOrder(BiTree p){//中序遍历二叉树
if(p!=NULL){
InOrder(p->lchild);
cout<<p->data<<en