下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、(1)根据输入字符序列,建立二叉链表;(2)用递归算法实现输出二叉树的前序、中序、后序遍历序列;(3)用非递归算法实现输出二叉树的前序、中序遍历序列;(4)求二叉树的叶子个数;(5)求度为1 的结点的个数;(6)求二叉树的高度。建立二叉链表的方法有多种,前面已经介绍了一种,即将二叉树扩充成完全二叉树后 带虚点一起将结点按层次次序排列,然后依次输入该序列中各结点,创建二叉链表。在下面 程序中使用的是另外一种建立二叉链表的方法,其主要的实现思想是:添加虚结点,将二叉 树中的每一个结点都扩充成度为2 的结点,然后对扩充后的二叉树按前序遍历得到前序序 列,依次输入序列中各结点,建立二叉链表。例如:若要
2、创建5.13 的二叉树对应的二叉链 表,应该依次输入ABC#FG#D#E# (其中#表示虚点)。这是一个利用递归特性实现创建 二叉链表的算法,C函数为下面程序中的createBiTree ()。完整程序如下:#include stdio.h#include malloc.h#define MAXSIZE 100typedef char DataType;typedef struct Node/* 二叉链表存储结构 */ DataType data;struct Node *lchild,*rchild;BiTree;typedef BiTree* SElemType ;/* 栈中数据元素类型,
3、栈中保存结点指针 */typedef struct SElemType dataMAXSIZE;int top;SeqStack;/* 栈的类型定义,顺序栈 */* 栈的基本操作的实现 */*初始化栈/*初始化栈*/*首先建立栈空间,然后初始化栈顶指针*/ SeqStack *s;s=(SeqStack*)malloc(sizeof(SeqStack);s-top= -1;return s;int push (SeqStack *s, SElemType x) if (s-top=MAXSIZE-1)/*栈满不能入栈*/ printf(overflow); return 0;s-top+; s
4、-datas-top=x;return 1;void pop (SeqStack *s)/*出栈,假设栈不空*/ s-top-;int empty (SeqStack *s) if (s-top= -1) return 1;else return 0;SElemType top (SeqStack *s)/*设栈不空*/ return (s-datas-top );/* 二叉链表的基本操作的实现 */BiTree* createBiTree () /* 创建二叉链表递归算法 */ DataType ch;BiTree * T; ch=getchar();if(ch=#) return NULL
5、;else T=(BiTree *)malloc(sizeof(BiTree); T-data=ch;T-lchild=createBiTree();T-rchild=createBiTree(); return T;void PreOrder(BiTree *T) /* 前序遍历二叉树的递归算法 */ if(T) printf(%c,T-data); PreOrder(T-lchild); PreOrder(T-rchild);void InOrder(BiTree * T) /* 中序遍历二叉树的递归算法 */ if(T) InOrder (T-lchild); printf(%c,T-d
6、ata); InOrder (T-rchild);void PostOrder (BiTree * T)/* 后序遍历二叉树的递归算法*/ if(T) PostOrder (T-lchild); PostOrder (T-rchild); printf(%c,T-data);void PreOrderFei(BiTree *p) /* 前序遍历二叉树的非递归算法 */ SeqStack *s;s=initSeqStack();while(1) while(p) printf(%c, p-data); push(s,p); p=p-lchild; /*先访问结点,后压栈 */ if (empty
7、(s) break;p=top(s); pop(s); p=p-rchild;void InOrderFei(BiTree *p) /* 中序遍历二叉树的非递归算法 */ SeqStack *s;s=initSeqStack();while(1) while(p) push(s,p); p=p-lchild;/*先将结点指针压栈,待出栈时再访问 */if (empty(s) break;p=top(s); pop(s); printf(%c, p-data); p=p-rchild;int oneChild(BiTree *T) /* 求度为1 的结点数递归实现 */ int num=0,nu
8、m1,num2;if(T=NULL) return 0;else if(T-lchild=NULL & T-rchild!=NULL|T-lchild!=NULL &T-rchild=NULL) num=l;/*若当前访问结点的度为1,则num=1,否则为0*/numl=oneChild(T-lchild); /*num1 为左子树中度为 1 的结点数*/ num2=oneChild(T-rchild ); /*num2 为右子树中度为 1 的结点数*/ return num+num1+num2;int leafs(BiTree *T)/* 求叶子结点数 */ int num1,num2;if
9、(T=NULL) return 0;else if(T-lchild=NULL &T-rchild =NULL) return 1;num1=leafs(T-lchild );/*求左子树中叶子结点数*/num2=leafs(T-rchild );/*求右子树中叶子结点数*/return num1+num2;int height(BiTree *T)/* 求树高 */ int i,j;if(!T) return 0;i=height(T-lchild);/* 求左子树的高度*/ j=height(T-rchild);/*求右子树的高度*/return ij?i+1:j+1;/*二叉树的高度为左
10、右子树中较高的高度加 1*/ void main() BiTree *root; root=NULL;printf(nnt请输入结点的前序序列创建二叉树:#表示空:”); root=createBiTree();/* 生成二叉树 */ printf(nt前序遍历二叉树-递归:n);PreOrder(root);printf(nt前序遍历二叉树-非递归:n); PreOrderFei(root);printf(nt中序遍历二叉树-递归:n); InOrder(root);printf(nt中序遍历二叉树-非递归:n); InOrderFei(root);printf(nt后序遍历二叉树-递归:n); PostOrder(root);printf(nt 二叉树中叶子结点数为:%d, leafs(root);printf(nt 二叉树中度为 1 的结点数为:%d, oneChild(root);printf(nt 二叉树的高度为:d,height(root); getchar();运行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 胡椒小猪说课稿
- 吊装工程模板施工合同
- 舞台灯光货场租赁协议
- 图书配送货车司机聘用协议
- 质押借款协议
- 农业设施商品混凝土施工协议
- 城市绿化机械台班施工合同
- 儿童游乐设施资产管理方案
- 矿山爆破安全帽管理办法
- 供水工程项目招投标资料
- 检验科生化项目临床意义培训课件
- APQP产品先期策划计划流程图
- 危险化学品MSDS氨水(12%)
- 上海音乐出版社三年级上册音乐教案全册
- Q∕SY 02625.1-2018 油气水井带压作业技术规范 第1部分:设计
- 外市电引入工程施工组织设计方案
- 纸包装公司简介
- DB23∕T 389-2001 林木育苗技术规程
- 家长开放周活动家长意见反馈表
- 选择期刊投稿技巧课件(PPT 49页)
- 湘少版英语三下《Unit6Whatcolouristhisballoon》PPT课件2[wwwedudownnet]
评论
0/150
提交评论