原题链接:oj2824
求二叉树的层次遍历
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>
struct node
{
int data;
struct node *l,*r;
};
struct node *build(char *a,char *b,int le)
{
struct node *st;
int i;
if(le>0)
{
st=(struct node *)malloc(sizeof(struct node));
for(i=0; i<le; i++)
{
if(a[0]==b[i])
break;
}
st->data=a[0];
st->l=build(a+1,b,i);
st->r=build(a+1+i,b+i+1,le-i-1);
}
else return NULL;
return st;
};
void pull(struct node *st)
{
struct node *p[100];
int fr=0,be=0;
p[fr++]=st;
while(fr>be)
{
if(p[be]!=NULL)
{
printf("%c",p[be]->data);
p[fr++]=p[be]->l;
p[fr++]=p[be]->r;
}
be++;
}
printf("\n");
}
int main()
{
int t;
char a[100],b[100];
scanf("%d",&t);
while(t--)
{
scanf("%s%s",a,b);
int l;
l=strlen(a);
struct node *st;
st=build(a,b,l);
pull(st);
}
return 0;
}