实验7 二叉树的操作实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,所以赫夫曼树采用顺序存储方式。

相关文档
最新文档