Description
已知一颗二叉树的前序遍历和中序遍历,求二叉树的层次遍历。
Input
输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。
Output
每组输出这颗二叉树的层次遍历。
Sample
Input
2
abc
bac
abdec
dbeac
Output
abc
abcde
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<malloc.h>
typedef struct node
{
struct node *l,*r;
char data;
} node,*Tree;
char xian[1100],zhong[1100];
struct node*Creat(int n,char xian[],char zhong[])
{
if(n == 0)
return NULL;
Tree T;
int k;
T = (struct node*)malloc(sizeof(node));
T->data = xian[0];
for(int i=0;i<n;i++)
{
if(zhong[i] == xian[0])
{
k = i;
break;
}
}
T->l = Creat(k,xian+1,zhong);
T->r = Creat(n-k-1,xian+k+1,zhong+k+1);
return T;
};
void ceng(Tree&T)
{
if(T==NULL)
return ;
Tree a[1100];
int i=0,n=0;
a[n++] = T;
while(i<n)
{
if(a[i])
{
if(a[i]->l!=NULL)
a[n++] = a[i]->l;
if(a[i]->r!=NULL)
a[n++] = a[i]->r;
}
i++;
}
for(int j=0;j<n;j++)
printf("%c",a[j]->data);
//printf("\n");
}
int main()
{
Tree T;
int t;
scanf("%d",&t);
getchar();
while(t--)
{
gets(xian);
gets(zhong);
int n = strlen(xian);
T = Creat(n,xian,zhong);//有返回的一定要写上,如果直接写Creat(n,xian,zhong),没有T则会显示错误
ceng(T);
printf("\n");
}
return 0;
}