Time Limit: 1000MS Memory limit: 65536K
题目描述
输入
输出
示例输入
2 abdegcf dbgeafc xnliu lnixu
示例输出
dgebfca abcdefg linux xnuli
提示
来源
示例程序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXQSIZE 100
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef BiTree QElemType;
typedef struct
{
QElemType *base;
int front;
int rear;
}SqQueue;
int InitQueue(SqQueue *Q)
{
Q->base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));
if(!Q->base)
return -1;
Q->front=Q->rear=0;
return 0;
}
int QueueEmpty(SqQueue *Q)
{
if(Q->front==Q->rear)
return 1;
else
return 0;
}
int EnQueue(SqQueue *Q,QElemType e)
{
if((Q->rear+1)%MAXQSIZE==Q->front)
return 0;
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXQSIZE;
return 1;
}
int DeQueue(SqQueue *Q,QElemType *e)
{
if(Q->front==Q->rear)
return 0;
*e=Q->base[Q->front];
Q->front=(Q->front+1)%MAXQSIZE;
return 1;
}
BiTree CreatT(char *pre,char *ino,int len)
{
BiTree T;
if(len<=0)
return NULL;
T=(BiTree)malloc(sizeof(BiTNode));
T->data=*pre;
char *p;
for(p=ino;p;p++)
if(*p==*pre)
break;
int k;
k=p-ino;//左孩子的个数
T->lchild=CreatT(pre+1,ino,k);
T->rchild=CreatT(pre+1+k,p+1,len-1-k);
return T;
}
int visitT(char e)
{
printf("%c",e);
return 1;
}
void LRD(BiTree T)
{
if(T)
{
LRD(T->lchild);
LRD(T->rchild);
printf("%c",T->data);
}
}
void LevelOrderTraverse(BiTree T)
{
SqQueue Q;
BiTree P;
InitQueue(&Q);
if(T) EnQueue(&Q,T);
while(!QueueEmpty(&Q))
{
DeQueue(&Q,&P);
visitT(P->data);
if(P->lchild) EnQueue(&Q,P->lchild);
if(P->rchild) EnQueue(&Q,P->rchild);
}
}
int main()
{
int n;
char pre[51],ino[51];
scanf("%d",&n);
while(n--)
{
scanf("%s%s",pre,ino);
BiTree T;
int len=strlen(pre);
T=CreatT(pre,ino,len);
LRD(T);
printf("\n");
LevelOrderTraverse(T);
printf("\n");
}
return 0;
}