hdu 1710 Binary Tree Traversals(由先序和中序建树)

题意:已知先序和中序,求后序遍历结果

要注意输出时格式问题(两数之间有一个空格,最后一个数后无空格)

具体思想请参考上一篇博客

链接:hdu 1710

代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct stu
{
    int c;
    struct stu *l,*r;
}Tree;
int j;
void creat(Tree **T,int *z,int m1,int n1,int *x,int m2,int n2)
{
    int i;
    *T=NULL;
    if(m1==n1){
        *T=(Tree *)malloc(sizeof(Tree));
        (*T)->c=z[m1];
        (*T)->l=(*T)->r=NULL;
    }
    else{
        for(i=m1;i<=n1;i++)
            if(z[i]==x[m2])
                break;
        *T=(Tree *)malloc(sizeof(Tree));
        (*T)->c=x[m2];
        if(i-1>=m1&&i+1<=n1){
            creat(&(*T)->l,z,m1,i-1,x,m2+1,m2+i-m1);
            creat(&(*T)->r,z,i+1,n1,x,m2+i-m1+1,n2);
        }
        else if(i-1<m1&&i+1<=n1){
            creat(&(*T)->r,z,i+1,n1,x,m2+i-m1+1,n2);
            (*T)->l=NULL;
        }
        else if(i-1>=m1&&i+1>n1){
            creat(&(*T)->l,z,m1,i-1,x,m2+1,m2+i-m1);
            (*T)->r=NULL;
        }
    }
}
void printh(Tree *T,int n)
{
    if(T!=NULL){
        printh(T->l,n);
        printh(T->r,n);
        printf("%d",T->c);
        j++;
        if(j<n)
            printf(" ");
        else
            printf("\n");
    }
}
int main()
{
    int x[1010],z[1010],i,n;
    Tree *T=NULL;
    while(scanf("%d",&n)!=EOF){
        for(i=0;i<n;i++)
            scanf("%d",&x[i]);
        for(i=0;i<n;i++)
            scanf("%d",&z[i]);
        creat(&T,z,0,n-1,x,0,n-1);
        j=0;
        printh(T,n);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值