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
- 2015年大二上-数据结构-树和二叉树-2-(3)二叉树的构造
- 2015年大二上-数据结构-树和二叉树-2-(1)二叉树的层次遍历
- 2015年大二上-数据结构-树和二叉树-2-(2)二叉树的非递归遍历
- 2015年大二上-数据结构-树和二叉树-1-(2)二叉树遍历的递归算法
- 2015年大二上-数据结构-树和二叉树-1-(1)二叉树算法库
- 2015年大二上-数据结构-树和二叉树-2-(5)哈夫曼编码
- 2015年大二上-数据结构-树和二叉树-1-(3)用二叉树遍历思想解决问题
- 2015年大二上-数据结构-树和二叉树-2-(4)中序线索化二叉树
- 2015年大二上-数据结构-查找-1-(4)-二叉树排序树中查找的路径
- 第十一周--数据结构--二叉树的构造
- 数据结构—二叉树的构造
- 2015年大二上-数据结构-查找-2-(3)-B-树的基本操作
- 二叉树的构造
- 二叉树的构造
- 二叉树的构造
- 二叉树的构造
- 二叉树的构造
- 二叉树的构造
- 学习Android从0开始之基础篇(2)-AndroidMainfest.xml文件详解
- 答辩总结
- 物体运动--通过改变transform--键盘控制
- Servlet
- 对象
- 2015年大二上-数据结构-树和二叉树-2-(3)二叉树的构造
- isPrime
- code vs电话连线
- SPI接口扫盲 SPI定义/SPI时序(CPHA CPOL)
- 给自己一个新的开始
- 使用Supervisor管理Linux进程
- 委托的Invoke 和 BeginInvoke 与Control的Invoke和BeginInvoke
- 工厂三兄弟之抽象工厂模式
- 互联网保险O2O平台微服务架构设计