PTA 7-7 后序和中序构造二叉树

本题目要求用后序序列和中序序列构造一棵二叉树(树中结点个数不超过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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值