版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验四 二叉树的操作及应用实验学时:4实验类型:(设计型)一、实验目的1.理解并掌握二叉树的逻辑结构和物理结构二叉链表;2.掌握二叉树的遍历方法; 3.掌握二叉树的构造方法;4. 掌握计算二叉树结点个数、高度、叶子结点个数算法实现; 5. 掌握交换二叉树左右子树以及复制一棵二叉树算法的实现。二、实验条件Visual C+ 6.0三、实验原理及相关知识1.二叉树的存储结构描述;2.二叉树中序、前序、后序、层次遍历的基本思想;3.构造二叉树的基本思想;4.求二叉树结点个数、高度、叶子结点个数算法的基本思想;5.交换二叉树左右子树以及复制一棵二叉树算法的基本思想。四、实验步骤1.确定存储结构,写出二
2、叉链表结构类型的具体定义。2.基本操作的算法实现(1)中序、前序、后序、层次遍历的递归算法的基本思想及算法实现;(2)利用先序序列构造二叉树方法的基本思想及算法实现;(3)求结点个数、高度、叶子结点个数、交换二叉树左右子树以及复制一棵二叉树的递归算法的基本思想及算法实现。五、思考题及其它1.线索二叉树的构造及线索化方法的算法实现。【参考程序1】#include#include#include #define MaxSize 20typedef int ElemType;#define OK 1typedef struct BiTNodeElemType data;struct BiTNode
3、*lchild, *rchild;BiTNode,*BiTree;/建立二叉树(按先序序列生成二叉树,#表示空节点)void CreateBiTree(BiTree *T)char ch;scanf(%c,&ch);getchar();/*回车键(每次输入一个字符后,需敲回车键)*/if(ch=#)printf(不产生子树。n);*T=NULL;elseif(!(*T=(BiTNode *)malloc(sizeof(BiTNode)printf(分配空间失败);return;/生成一个新节点(*T)-data = ch;printf(产生左右子树。n); ; ; /递归前序遍历void Pr
4、eorder(BiTNode *T) if(T) printf(%c ,T-data); Preorder(T-lchild); Preorder(T-rchild); /递归中序遍历void Inorder(BiTNode *T) if(T) ; ; ; /递归后序遍历void Postorder(BiTNode *T)if(T) ; ; ; /层次遍历二叉树void Translever(BiTNode *T)struct nodeBiTNode *vecMaxSize;int f,r; /r为队尾,f为队头queue;BiTNode *p;p=T;queue.f=0;queue.r=0;
5、if(T)printf(%c , p-data);queue.vecqueue.r=p;queue.r=queue.r+1;while(queue.flchild)printf(%c ,p-lchild-data);queue.vecqueue.r=p-lchild;queue.r=queue.r+1;if(p-rchild) ; ; ;printf(n);/按广义表形式输出二叉树void Disptree(BiTNode *T)if(T)printf(%c,T-data); if(T-lchild | T-rchild)printf();Disptree(T-lchild);if(T-rch
6、ild)printf(,);Disptree(T-rchild);printf(); void main()BiTree T=NULL;int j;int sign = 1;int num;printf(本程序可以进行建立二叉树、递归先序、中序、后序遍历二叉树、层次遍历二叉树、输出二叉树的扩展序列的操作。n);printf(请将二叉树的先序序列输入以建立二叉树。n);printf(您必须一个一个地输入字符。n);while(sign) printf(请选择: n);printf(1.生成二叉树(#表示空结点) n);printf(2.递归先序遍历 3.递归中序遍历n);printf(4.递归后
7、序遍历 5.层次遍历n);printf(6.输出二叉树的广义表形式 n); printf(0.退出程序n);scanf(%d,&j);getchar();switch(j)case 1:printf(生成二叉树:);CreateBiTree(&T); printf(n);printf(n);break;case 2:if(T)printf(递归先序遍历二叉树:);Preorder(T);printf(n);printf(n);else printf(二叉树为空!n);break; case 3:if(T)printf(递归中序遍历二叉树:);Inorder(T);printf(n);print
8、f(n);else printf(二叉树为空!n);break;case 4:if(T)printf(递归后序遍历二叉树:);Postorder(T);printf(n);printf(n);else printf(二叉树为空!n);break;case 5:if(T)printf(层次遍历二叉树:);Translever(T);printf(n);printf(n);else printf(二叉树为空!n);break;case 6:if(T)printf(输出二叉树:);Disptree(T);printf(n);printf(n);else printf(二叉树为空!n);break;d
9、efault:sign=0;printf(程序运行结束,按任意键退出!n);【参考程序2】#include#include#include #define MaxSize 20typedef int ElemType;#define OK 1int count;typedef struct BiTNodeElemType data;struct BiTNode *lchild, *rchild;BiTNode,*BiTree;/建立二叉树(按先序序列生成二叉树,#表示空节点)void CreateBiTree(BiTree *T)char ch;scanf(%c,&ch);getchar();
10、/*回车键(每次输入一个字符后,需敲回车键)*/if(ch=#)printf(不产生子树。n);*T=NULL;elseif(!(*T=(BiTNode *)malloc(sizeof(BiTNode)printf(分配空间失败);return;/生成一个新节点(*T)-data = ch;printf(产生左右子树。n); CreateBiTree(&(*T)-lchild) ; CreateBiTree(&(*T)-rchild) ; int Count_Tree(BiTree t)/计算二叉树的结点个数。int lcount,rcount;if(t=NULL) return 0; ret
11、urn lcount+rcount+1;int Height(BiTree t) /计算二叉树的高度int h1,h2;if(t=NULL) return 0;else h1=Height(t-lchild); /求左子树的高度 h2=Height(t-rchild); if(h1h2) return h1+1; /求右子树的高度 return h2+1;void Countleaf(BiTree t,int * count) /计算二叉树的叶子结点的个数if(t=NULL) *count=0;if(t-lchild=0 & t-rchild=0) (*count)+;if(t-lchild!
12、=0) Countleaf(t-lchild,count);if(t-rchild!=0) Countleaf(t-rchild,count);void Swapbitree(BiTree t) /交换二叉树的左右子树 BiTree p; if(t=NULL) return; Swapbitree(t-lchild); Swapbitree(t-rchild); p=t-lchild; t-lchild=t-rchild; t-rchild=p;void Copybitree(BiTree t1,BiTree t2) /复制一棵二叉树 if (t1=NULL) t2=NULL; return;
13、 t2=(BiTree)malloc(sizeof(BiTNode); t2-data=t1-data; void Preorder(BiTree T) if(T) printf(%c ,T-data); Preorder(T-lchild); Preorder(T-rchild); void main()BiTree T=NULL,T1=NULL;int j;int sign = 1;int num; count=0;printf(本程序可以建立二叉树、求二叉树的结点个数、高度、叶子结点个数,交换二叉树的左右子树,复制一棵二叉树。n);printf(请将二叉树的先序序列输入以建立二叉树。n)
14、;printf(您必须一个一个地输入字符。n);while(sign) printf(请选择: n);printf(1.生成二叉树(#表示空结点) n);printf(2.递归求结点个数 3.递归求高度n );printf(4.递归求叶子结点个数 5.递归交换二叉树左右子树n);printf(6.递归复制一棵二叉树 7.输出二叉树n); printf(0.退出程序n);scanf(%d,&j);getchar();switch(j)case 1:printf(生成二叉树:);CreateBiTree(&T); printf(n);printf(n);break;case 2:if(T)prin
15、tf(递归求二叉树的结点个数:n);printf(二叉树的结点个数为:%dn,Count_Tree(T);else printf(二叉树为空!n);break; case 3:if(T) printf(递归求二叉树的高度:n); printf(二叉树的高度为:%dn,Height(T);else printf(二叉树为空!n);break;case 4:if(T) printf(递归求二叉树的叶子结点个数:n); Countleaf(T,&count); printf(二叉树的叶子结点个数为:%dn,count);else printf(二叉树为空!n);break;case 5:if(T) printf(递归交换二叉树左右子树:n);Swapbitree(T);Preorder(T);printf(n);else prin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业单位工程审计制度
- 交通局审计制度
- 人民银行延伸审计制度
- 企业入职教育培训制度
- 会所绩效考核制度
- 供应链部绩效考核制度
- 保险内部审计制度
- 信贷风控制度
- 全国最早建立审计制度
- 19.1.2 函数的图象(第2课时)教学设计-人教版(2012)八年级下册
- 2026福建泉州市级国资集团公司总部纪检监察类中层副职岗位招聘5人笔试备考题库及答案解析
- 有机试剂工安全检查知识考核试卷含答案
- 木工三级安全教育
- AutoCAD2020教程课件完整版
- GB/T 4956-2003磁性基体上非磁性覆盖层覆盖层厚度测量磁性法
- GB 12476.5-2013可燃性粉尘环境用电气设备第5部分:外壳保护型“tD”
- 新编教育社会学课件
- 2022年海南省农垦投资控股集团有限公司招聘笔试试题及答案解析
- 自考《现代设计史》(05424)考试复习题库(汇总版)
- 陕西省科学技术奖提名通用项目汇总表
- 乡镇便民服务中心建设项目可行性研究报告
评论
0/150
提交评论