本题目要求用后序序列和中序序列构造一棵二叉树(树中结点个数不超过10个),并输出其先序序列。
输入格式:
在第一行中输入元素个数。
第二行中输入后序序列,用空格分隔。
第三行中输入中序序列,用空格分隔。
输出格式:
输出此二叉树的先序序列,用空格分隔,最后也有一个空格。
输入样例:
5
20 40 50 30 10
20 10 40 30 50
输出样例:
10 20 30 40 50
不要把creat写成create啊啊啊啊!!!
代码实现:
#include <stdio.h>
typedef struct Bnode{
int data;
struct Bnode *Lson,*Rson;
}Bnode,*Bptr;
Bptr creat(int a[],int b[],int i,int j,int s,int t)
{
int k;Bptr p;
if(i>j) return NULL;
p=(Bptr)malloc(sizeof(Bnode));
p->data=a[j];
k=s;
while((k<=t)&&(b[k]!=a[j]))
k++;
p->Lson=creat(a,b,i,i+k-s-1,s,k-1);
p->Rson=creat(a,b,i+k-s,j-1,k+1,t);
return p;
}
void ye(Bptr p){
if(p==NULL)return ;
printf("%d ",p->data);
ye(p->Lson);
ye(p->Rson);
}
int main(){
int c,a[99],b[99],m;
Bptr f;
scanf("%d",&c);
for(m=0;m<c;m++)
scanf("%d",&a[m]);
for(m=0;m<c;m++)
scanf("%d",&b[m]);
f=creat(a,b,0,c-1,0,c-1);
ye(f);
return 0;
}