- 1、本文档共2页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验五 树结构及其应用
本实验根据树结构的非线性特点,将操作集中在遍历操作上,因为遍历操作是其他众多操作的基
础。本实验还希望达到使学生熟悉各种存储结构的特征,以及掌握如何应用树解决具体问题(即原理
与应用的结合)等目的。
1.二叉树的建立与遍历(验证性实验)
【问题描述】
建立一棵二叉树,并对其进行遍历(先序、中序和后序),打印输出遍历结果。
【基本要 】
从键盘接受输入(先序序列),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用
递归算法对其进行遍历(先序、中序和后序),将遍历结果打印输出。
【测试数据】
ABC DE G F (其中表示空),则输出结果为:
## # ## ### #
先序为ABCDEGF,中序为CBEGDFA,后序为CGBFDBA。
2. 利用二叉树的遍历算法的基本操作(设计性实验)
【问题描述】利用二叉树的遍历算法:
求二叉树的结点数;
求二叉树的叶结点数;
求二叉树的高度。
【基本要 】
(1) 按第1题中的方法建立二叉链表存储的二叉树。
(2) 提供菜单选择计算结点数、叶结点数、高度。
【提示】
求二叉树的结点数;
1+左子树的结点数+右子树的结点数
求二叉树的叶结点数;
左子树的叶结点数+右子树的叶结点数
求二叉树的高度。
1+ (左、右子树高度较大的值)
【测试数据】
A
C
B
A
D E
F
如图中的二叉树,结点数:6个 叶结点数: 2个 高度:4
3.赫夫曼编码(综合性实验) (选做)
【问题描述】
设某编码系统共有n个字符,使用频率分别为w , w , …, w ,设计一个不等长的编码方案,使得该
1 2 n
编码系统的空间效率最好。
【基本要求】
(1)初始化(Initialization )。从终端读入一段英文字符,统计每个字符出现的频率,建立赫夫曼
树;
(2)编码(Encoding)。利用建好的赫夫曼树对各字符进行编码,用列表的形式显示在屏幕上,并
将编码结果输出;
(3)译码(Decoding)。利用已建好的赫夫曼树对编码进行译码,结果输出。
以下内容虽难度提高,但比较有意思,推荐有能力的同学选做,或者2-3个同学讨论后共同开发,
具体功能及完成程度不做限制。建议大家上网搜索相关资料!
【进阶要求】利用赫夫曼编码将任意的英语文本文件压缩和解压缩
(1)初始化(Initialization)。从终端读入一个英语文本文件ToBeTran,统计每个字符出现的频率,
建立赫夫曼树,并将它存于文件hfmTree中(亦可不保存)。
(2)压缩(Compress)。利用已建好的赫夫曼树对文件ToBeTran中的正文进行编码,然后将结果存
入文件CodeFile中。
(3)解压(Uncompress)。利用已建好的赫夫曼树将文件CodeFile中的代码进行译码,结果存入文
件TextFile中。
(4)比较文件(Compare)。使用Dos命名FC比较文件ToBeTran和文件TextFile两个文件是否相同。
可调用system(“FC ToBeTran.txt TextFile.txt”); 语句进行比较。
(5)打印赫夫曼树(Tree printing)。将已在内存中的赫夫曼树以直观的方式显示在终端上。
【注】完成后可观察压缩文件与原文件的大小,计算下压缩率。
文档评论(0)