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

来源:互联网 发布:反智主义 知乎 编辑:程序博客网 时间:2024/06/13 13:41

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

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

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

链接: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;}


0 0
原创粉丝点击