求二叉树的层次遍历
Description
已知一颗二叉树的前序遍历和中序遍历,求二叉树的层次遍历。
Input
输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。
Output
每组输出这颗二叉树的层次遍历。
Sample
Input
2
abc
bac
abdec
dbeac
Output
abc
abcde
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
char data;
struct node*rchild,*lchild;
} Tree;
Tree*Create(char pre[],char mid[],int len)
{
Tree*t;
if(len==0)
return NULL;
else
{
int k;
for(int i=0; i<len; i++)
{
if(mid[i]==pre[0])
{
k=i;
break;
}
}
t=(Tree*)malloc(sizeof(Tree));
t->data=pre[0];
t->rchild=Create(pre+1,mid,k);
t->lchild=Create(pre+k+1,mid+k+1,len-k-1);
}
return t;
}
int main()
{
int n;
cin>>n;
Tree*t;
while(n--)
{
char pre[1000];
char mid[1000];
Tree*Queue[1000];//用结构体数组代表队列;
int rear=0,fron=0;//rear为队尾指针,fron为队头指针
scanf("%s",pre);
scanf("%s",mid);
t=(Tree*)malloc(sizeof(Tree));
t=Create(pre,mid,strlen(mid));
Queue[rear++]=t;//初始时将头结点入栈、队尾指针后移
Tree*t1;
while(fron!=rear)
{
t1=Queue[fron++];//出栈,队头指针后移。
cout<<t1->data;
if(t1->rchild)
{
Queue[rear++]=t1->rchild;
}
if(t1->lchild)
{
Queue[rear++]=t1->lchild;
}
}
cout<<endl;
}
}