实验7 二叉树的操作实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验7 二叉树的操作实现
1. 实验要求
(1) 实现二叉树的存储结构设计;
(2) 掌握二叉树的生成、遍历等操作
(3) 掌握赫夫曼编码/解码原理
(4) 实现最优二叉树的编码、解码等操作算法设计
2. 主要实验方法
(1) 设计算法思想;
(2) 编写算法代码;
(3) 运行算法代码,并分析算法的效率;
3. 实验内容
(1)给定一段字符,构建赫夫曼树(最优二叉树);
(2)根据该树求每个字符的霍夫曼编码,并对该段字符串进行编码;
(3)将得到的编码进行译码;
(4)基于该赫夫曼树,通过遍历算法来输出该树中的叶子结点。
注:在实现时要求赫夫曼树的左右孩子的大小关系(左孩子结点值小于右孩子结
点值),可以使用递归或者非递归遍历寻找叶子结点。
4. 实验重点和难点
(1) 重点:最优二叉树的生成、遍历操作算法设计;
(2) 难点:赫夫曼编码算法设计。
5. 算法指导
1、赫夫曼算法(由给定的权值构造赫夫曼树):
(1)由给定的n个权值{w0, w1, w2, …, w n-1},构造具有n棵二叉树的集合F={T0, T1, T2, …, T n-1},其中每棵二叉树T i只有一个带权值w i的根结点,其左、右子树均为空。
(2)重复以下步骤, 直到F中仅剩下一棵树为止:
① 在F中选取两棵根结点权值最小的二叉树,作为左、右子树构造一棵新二叉树。置新二叉树的根结点的权值为其左、右子树上根结点的权值和。
② 在F中删去这两棵二叉树。
③ 把新的二叉树加入F。
2、赫夫曼编码:
把d1,d2,…, d n作为叶子结点,把w1,w2,…,w n作为叶子结点的权,按照赫夫曼算法,构造赫夫曼树。
在赫夫曼树中,结点的左分支置0,右分支置1,从根结点到叶子结点的路径上的数字拼接起来,就是这个叶子结点字符的赫夫曼编码。
3、解码过程:
分解电文中的字符串,从根出发,按字符‘0’或‘1’确定找左孩子或右孩子,直至叶子节点,便求得该子串对应的(译码)字符。
6. 实验结果与分析
(必须写这部分)
应用文字、表格、图形等将数据表示出来
7. 实验总结与体会
必须写这部分
8. 部分代码指导
重点思考:赫夫曼树结点个数为何固定为2n-1个?正因为结点固定为2n-1,所以赫夫曼树采用顺序存储方式。