2015年大二上-数据结构-树和二叉树-2-(3)二叉树的构造

来源:互联网 发布:lee levis 知乎 编辑:程序博客网 时间:2024/06/05 00:30

/**Copyright (c) 2014,烟台大学计算机学院*All rights reserved.*文件名称:Annpion.cpp*作者:王耀鹏*完成日期:2016年1月6日*版本号:v1.0**问题描述:二叉树的构造 *输入描述:无*输出描述:输出先序和中序构造二叉树、中序和后序构造二叉树、顺序存储结构转为二叉链存储结构*/#include <stdio.h>#include <malloc.h>#include "BTree.h"typedef ElemType SqBTree[MaxSize];BTNode *CreateBT1(char *pre,char *in,int n)//由先序序列和中序序列构造二叉树/*pre存放先序序列,in存放中序序列,n为二叉树结点个数,本算法执行后返回构造的二叉链的根结点指针*/{    BTNode *p;    char *ch;    int i;    if(n<=0) return NULL;    p=(BTNode *)malloc(sizeof(BTNode));    p->data=*pre;    for(ch=in;ch<in+n;++ch)        if(*ch==*pre)        break;    i=ch-in;    p->lchild=CreateBT1(pre+1,in,i);    p->rchild=CreateBT1(pre+i+1,ch+1,n-i-1);    return p;}BTNode *CreateBT2(char *post,char *in,int n)//由后序序列和中序序列构造二叉树/*post存放后序序列,in存放中序序列,n为二叉树结点个数,本算法执行后返回构造的二叉链的根结点指针*/{    BTNode *p;    char *ch;    int i;    if(n<=0) return NULL;    p=(BTNode *)malloc(sizeof(BTNode));    p->data=*(post+n-1);    for(ch=in;ch<in+n;++ch)        if(*ch==*(post+n-1))        break;    i=ch-in;    p->lchild=CreateBT2(post,in,i);    p->rchild=CreateBT2(post+i,ch+1,n-i-1);    return p;}BTNode *trans(SqBTree a,int i)//由顺序存储结构转为二叉链存储结构 {    BTNode *p;    if(i>MaxSize||a[i]=='#')        return NULL;    p=(BTNode *)malloc(sizeof(BTNode));    p->data=a[i];    p->lchild=trans(a,2*i);    p->rchild=trans(a,2*i+1);    return p;}int main(){    ElemType pre[]="ABDGCEF",in[]="DGBAECF",post[]="GDBEFCA",s[]="0ABCD#EF#G####################";    BTNode *b3,*b2,*b1;    b1=CreateBT1(pre,in,7);    printf("b1:");    DispBTNode(b1);    printf("\n");    b2=CreateBT2(post,in,7);    printf("b2:");    DispBTNode(b2);    printf("\n");    b3=trans(s,1);    printf("b3:");    DispBTNode(b3);    printf("\n");    return 0;}

运行结果:


0 0
原创粉丝点击