#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int pre[1001],in[1001];
typedef int ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree CreatBiTree(int *pre,int *in,int len)
{
BiTree T;
if(!len) return NULL;
T=(BiTree)malloc(sizeof(struct BiTNode));
T->data=pre[0];
int i;
for(i=0;i<len;i++)
{
if(pre[0]==in[i])
break;
}
T->lchild=CreatBiTree(pre+1,in,i);
T->rchild=CreatBiTree(pre+i+1,in+i+1,len-i-1);
return T;
}
BiTree change(BiTree T)
{
BiTree t;
if(T)
{
if(T->lchild&&T->rchild)
{
t=T->lchild;
T->lchild=T->rchild;
T->rchild=t;
}
change(T->lchild);
change(T->rchild);
}
return T;
}
void LevelorderTraversal (BiTree T)
{
if(!T) return;
BiTree q[100];
int head=0,rear=0;
q[rear++]=T;
int flag=0;
while(head<rear)
{
if(q[head]->lchild)
q[rear++]=q[head]->lchild;
if(q[head]->rchild)
q[rear++]=q[head]->rchild;
if(flag)printf(" ");
printf("%d",q[head++]->data);
flag++;
}
}
int main()
{
int n;
int i;
scanf("%d\n",&n);
for(i=0;i<n;i++)
scanf("%d",&in[i]);
for(i=0;i<n;i++)
scanf("%d",&pre[i]);
BiTree T=NULL;
T=CreatBiTree(pre,in,n);
T=change(T);
LevelorderTraversal (T);
}
老老实实背模板吧