给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数N(<=30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。
输出格式:
在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
输入样例:7 2 3 1 5 7 6 4 1 2 3 4 5 6 7输出样例:
4 1 6 3 5 7 2
#include<stdio.h>
#include<malloc.h>
struct node{
int key;
struct node* l;
struct node* r;
};
struct node*create(struct node*T,int a[],int b[],int l1,int r1,int l2,int r2){
if(l1>r1)return NULL;
int p,q,t,i;
T=(struct node*)malloc(sizeof(struct node));
T->key=b[r2];
for(i=l1;i<=r1;i++){
if(a[i]==b[r2])break;
}
T->l=create(T->l,a,b,l1,i-1,l2,l2+i-1-l1);//!!!
T->r=create(T->r,a,b,i+1,r1,r2-r1+i,r2-1);//!!!
return T;
}
int main()
{
int a[30],b[30],i,n,head,tail,num[100],p=-1;
struct node *T,*q[100],*temp;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
scanf("%d",&b[i]);
T=create(T,b,a,0,n-1,0,n-1);
head=0;
tail=0;
q[tail++]=T;
while(head!=tail){
temp=q[head++];
num[++p]=temp->key;
if(temp->l)q[tail++]=temp->l;
if(temp->r)q[tail++]=temp->r;
}
for(i=0;i<p;i++)
printf("%d ",num[i]);
printf("%d\n",num[p]);
}