二叉树及其应用(实验五)
更新时间:2023-11-06 06:51:01 阅读量: 教育文库 文档下载
实验 五 二叉树及其应用
1.目的要求:
(1) 通过实验掌握二叉树的两种基本的存储结构,及二叉树的建立、遍历,并加以
应用。
(2) Huffman树建立、编码。 2.实验内容:
(1) 按先序次序输入二叉树中结点的值,建立一棵以二叉链表作存储结构的二叉树,
然后按先序、中序、后序顺序分别遍历这棵二叉树,并完成二叉树的相应信息的统计(如各种结点数目、二叉树的高度等);
(2) 建立一棵二叉排序树,并对其进行先序、中序、后序遍历。 (3) 应用队列结构实现二叉树的层次遍历。
(4) 设计一个完整的编码系统:针对一篇文档,统计各个字符的出现次数,并为其设
计Huffman编码。
注:(1)~(2)必做,(3)~(4)选做。
三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)
(1) 按先序次序输入二叉树中结点的值,建立一棵以二叉链表作存储结构的二叉树,
然后按先序、中序、后序顺序分别遍历这棵二叉树,并完成二叉树的相应信息的统计(如各种结点数目、二叉树的高度等);
? 程序代码:
头文件:
#ifndef _H_ #define _H_
#define OK 1 #define ERROR 0 #define OVERFLOW -2
typedef int Status; typedef char TElemType; typedef struct BiTNode {
TElemType e;
struct BiTNode *LChild,*RChild; }BiTNode,*BiTree;
Status Create(BiTree &T);
Status PrintElemType(TElemType e);
Status PreOrderTraver(BiTree T,Status (* visit)(TElemType e)); Status InOrderTraver(BiTree T,Status (* visit)(TElemType e)); Status PostOrderTraver(BiTree T,Status (* visit)(TElemType e)); Status Count(BiTree T); Status Countleaf(BiTree T); Status Counttwo(int n);
Status Countone(int n,int n0,int n2); Status Depth(BiTree T); #endif 主函数: #include
BiTree T;
printf(\请按照先序输入树值:\\n\
if(!Create(T)) printf(\存储空间分配失败\\n\ printf(\先序遍历该树为:\\n\
if(!PreOrderTraver(T,PrintElemType)) printf(\打印函数出错\\n\ printf(\
printf(\中序遍历该树为:\\n\
if(!InOrderTraver(T,PrintElemType)) printf(\打印函数出错\\n\ printf(\
printf(\后序遍历该树为:\\n\
if(!PostOrderTraver(T,PrintElemType)) printf(\打印函数出错\\n\ printf(\
printf(\总结点数有:%d\\n\
printf(\其中叶子结点数有:%d\\n\
printf(\其中一度结点数有:%d\\n\ printf(\其中二度结点数有:%d\\n\ printf(\该二叉树的深度为:%d\\n\ return 0; }
功能函数:
#include
//先序建立二叉 Status Create(BiTree &T) {
char ch; scanf(\ if(ch==' ') T=NULL; else {
if(!(T=(BiTree)malloc(sizeof(BiTNode)))) exit(OVERFLOW);
T->e=ch;
Create(T->LChild); Create(T->RChild);
} return OK; }
//输出结点中的数值
Status PrintElemType(TElemType e) {
printf(\ }
//先序遍历
Status PreOrderTraver(BiTree T,Status (* visit)(TElemType e)) { if(T) {
if(visit(T->e)) }
//中序遍历
Status InOrderTraver(BiTree T,Status (* visit)(TElemType e)) { if(T)
{
if(PreOrderTraver(T->LChild,visit)) }
return ERROR;
if(PreOrderTraver(T->RChild,visit)) return OK;
return OK;
}else return OK;
{
if(InOrderTraver(T->LChild,visit)) }
//后序遍历
Status PostOrderTraver(BiTree T,Status (* visit)(TElemType e)) { if(T) {
if(PostOrderTraver(T->LChild,visit)) }
//总结点数
Status Count(BiTree T) {
int num1,num2,num; if(T==NULL) num=0; else {
num1=Count(T->LChild);
num2=Count(T->RChild); num=num1+num2+1; {
if(PostOrderTraver(T->RChild,visit)) }
return ERROR;
if(visit(T->e)) return OK; {
if(visit(T->e)) }
return ERROR;
if(InOrderTraver(T->RChild,visit)) return OK;
}else return OK;
}else return OK;
}
return num; }
//叶子结点数
Status Countleaf(BiTree T) {
int num1,num2,num; if(T==NULL) num=0; else {
if(T->LChild==NULL&&T->RChild==NULL) num=1;
else {
num1=Countleaf(T->LChild);
num=num1+num2;
num2=Countleaf(T->RChild);
}
}
return num; }
//二度结点数
Status Counttwo(int n)//n为终端结点数 终端结点数==二度结点数+1 {
int num; num=n-1; return num; }
//一度结点数
Status Countone(int n,int n0,int n2)//一度结点数==总数-0度结点数-2度结点数 {
int num; num=n-n0-n2; return num; }
//二叉树深度 Status Depth(BiTree T) {
int dep,depl,depr; if(T==NULL) dep=0; else {
depl=Depth(T->LChild); depr=Depth(T->RChild);
dep=1+(depl>depr?depl:depr); } return dep; }
? 运行结果:
(2) 建立一棵二叉排序树,并对其进行先序、中序、后序遍历。
程序代码部分:
头文件:
#ifndef _H_ #define _H_
#define OK 1 #define ERROR 0 #define OVERFLOW -2
typedef int Status; typedef int TElemType; typedef struct BiTNode {
TElemType e;
struct BiTNode *LChild,*RChild; }BiTNode,*BiTree;
Status Insert(BiTree &T,TElemType e); void Create(BiTree &T);
Status PrintElemType(TElemType e);
Status PreOrderTraver(BiTree T,Status (* visit)(TElemType e)); Status InOrderTraver(BiTree T,Status (* visit)(TElemType e)); Status PostOrderTraver(BiTree T,Status (* visit)(TElemType e)); #endif
主函数:
#include
BiTree T=NULL;
printf(\请输入树值建立二叉排序数(输-1表示输入结束):\\n\ Create(T);
printf(\先序遍历该树为:\\n\
if(!PreOrderTraver(T,PrintElemType)) printf(\打印函数出错\\n\ printf(\
printf(\中序遍历该树为:\\n\
if(!InOrderTraver(T,PrintElemType)) printf(\打印函数出错\\n\ printf(\
printf(\后序遍历该树为:\\n\
if(!PostOrderTraver(T,PrintElemType)) printf(\打印函数出错\\n\ printf(\ return 0; }
功能函数:
#include
//插入结点
Status Insert(BiTree &T,TElemType e) { if(T==NULL) {
if(!(T=(BiTree )malloc(sizeof(BiTNode)))) exit(OVERFLOW); T->e=e; T->LChild=T->RChild=NULL; } else { if(e
return OK; }
//建立二叉排序
void Create(BiTree &T) {
TElemType e;
for(scanf(\ {
Insert(T,e); } }
//输出结点中的数值
Status PrintElemType(TElemType e) {
printf(\ return OK; }
//先序遍历
Status PreOrderTraver(BiTree T,Status (* visit)(TElemType e)) { if(T) {
if(visit(T->e)) { if(PreOrderTraver(T->LChild,visit)) if(PreOrderTraver(T->RChild,visit)) return OK; } return ERROR;
}else return OK; }
//中序遍历
Status InOrderTraver(BiTree T,Status (* visit)(TElemType e)) { if(T) {
if(InOrderTraver(T->LChild,visit)) { if(visit(T->e)) if(InOrderTraver(T->RChild,visit)) return OK; } return ERROR; }else return OK; }
//后序遍历
Status PostOrderTraver(BiTree T,Status (* visit)(TElemType e)) { if(T) {
if(PostOrderTraver(T->LChild,visit)) { if(PostOrderTraver(T->RChild,visit)) if(visit(T->e)) return OK; } return ERROR; }else return OK; }
? 运行结果:
(3)应用队列结构实现二叉树的层次遍历。
程序代码:
头文件:
#define OK 1 #define ERROR 0 #define OVERFLOW -2
typedef char ElemType; typedef int Status;
//二叉树结点 typedef struct BiTNode {
ElemType e;
struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;
//队列结点
typedef struct QNode {
正在阅读:
二叉树及其应用(实验五)11-06
怀念童的语句02-11
浅析市农村消费市场的现状存在的问题及对策06-04
传媒在体育非物质文化遗产保护中的作用研究05-20
数据库关系代数习题06-24
共建清洁美丽世界主题优秀演讲稿范文合集04-03
2010级生涯规划与就业指导考试09-30
人际关系学试题及答案(自考)07-03
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 及其
- 实验
- 应用
- 提防工程运行管理报告
- 非语言交际在中西方文化中差异论文
- 家长会材料,八年级
- 信访条例知识解读
- 如何当好一名村干部(村干部培训讲稿)
- 2015年公务员考试《行测》考点全预测试卷五及解析 - 图文
- 2016届高考历史 第12讲 从新中国成立到改革开放前(1949~1976)—社会主义建设在曲折中探索(含解析)
- 全国教育硕士英语(毛大威)学生用书参考
- 高三学生动员大会发言稿:高三,我们一同走过
- 给排水试题3
- (F=2500 - v=1.1 - D=400 - 8小时300天10年)同轴式二级斜齿圆柱齿轮减速器
- 刘霖 - 教书育人,需要慢下来
- 进一步完善生态补偿机制 推进德清生态文明建设
- 华为研发部门绩效考核制度及方案(经典)
- 房地产市场营销课程设计 - 图文
- 古代汉语语法
- 实验7 指针
- 从事网络职业那些人事儿
- 监理公司现场资料及归档资料规范
- 垂直运输(修改) - 图文