二叉树序列构建

根据二叉树的前序,中序与后序序列构建二叉树

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef struct node /*二叉树结构定义*/
{
    char data;
    struct node *lchild,*rchild;
}binnode;
typedef binnode *bintree;

bintree  CreateBinTreebyPreIn(char *pre,char *in,int n){
    bintree t;
    int k;
    char *p,r;
    if(n<=0){
        return NULL;
    }
    r=*pre;
    t=(bintree)malloc(sizeof(binnode));
    t->data=r;
    for(p=in;p<in+n;p++)
        if(*p==r) break;
    k=p-in;
    t->lchild=CreateBinTreebyPreIn(pre+1,in,k);
    t->rchild=CreateBinTreebyPreIn(pre+k+1,p+1,n-1-k);
    return t;
}
bintree  CreateBinTreebyPostIn(char *in,char *post,int n){
           bintree t;
           int k;
           char r,*p;
           if(n<=0){
            return NULL;
           }
           r=*(post+n-1);
           t=(bintree)malloc(sizeof(binnode));
           t->data=r;
           for(p=in;p<in+n;p++){    //在in中查找根节点
            if(*p==r) break;
           }
           k=p-in;//k为根节点在in中的位置
           t->lchild=CreateBinTreebyPostIn(in,post,k);
           t->rchild=CreateBinTreebyPostIn(p+1,post+k,n-k-1);
           return t;
}/*由中序序列in和后序序列post构造二叉树,并返回树根结点指针,如果树为空返回NULL        */

void DispBinTree(bintree t){
    if (t!=NULL)
    {
        printf("%c",t->data);
        if (t->lchild || t->rchild)
        {
            printf("(");
            DispBinTree(t->lchild);
            if (t->rchild) printf(",");
            DispBinTree(t->rchild);
             printf(")");
        }
    }
}/* 以括号表示法输出二叉树*/

int main()
{   bintree T;
    char pre[MaxSize],in[MaxSize],post[MaxSize];
    int n;

    scanf("%d",&n);getchar();
    scanf("%s",pre);
    scanf("%s",in);
    scanf("%s",post);
    T=CreateBinTreebyPreIn(pre,in,n);
    printf("\nthe result is:");
    if (T==NULL)
        printf("\nnull");
    else
        DispBinTree(T);
    T=CreateBinTreebyPostIn(in,post,n);
    printf("\nthe result is:");
    if (T==NULL)
        printf("\nnull");
    else
        DispBinTree(T);
    return 0;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务