- 1、本文档共118页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[理学]第5章 树和二叉树
F H G E A I C D B F H G D C E B A I F H G D C E B A I 加线 去线 层次调整 B C D A F E I H G 根结点 根结点的最大的孩子 根结点最大的弟弟 树或森林变成二叉树后的结点情况 4. 森林的遍历 森林有两种遍历方法: ⑴前序(根)遍历:前序遍历森林即为前序遍历森林中的每一棵树。(=二叉树的前序(根)遍历) ⑵后序(根)遍历:后序遍历森林即为后序遍历森林中的每一棵树。(=二叉树的中序(根)遍历) 5.6.1 二叉树的应用举例——哈夫曼树及哈夫曼编码 1. 哈夫曼树(Huffman tree)——相关概念 叶子结点的权值 对叶子结点赋予的一个有意义的数值量。 二叉树的带权路径长度 设二叉树具有n个带权值的叶子结点,从根结点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和。 记为: WPL= 其中:wk为第k个叶子结点的权值;lk为从根结点到第k个叶子结点的路径长度。 2 4 3 5 图5-36 一个带权二叉树: WPL=(2+3+4+5)*2=28 (a) WPL=37 (b) WPL=31 (c) WPL=29 图5-37 具有相同叶子结点和不同带权路径长度的二叉树 2 4 5 3 3 5 4 2 5 2 3 4 例:给定4个叶子结点,其权值分别为{2,3,4,5},可以构造出形状不同的多个二叉树。 哈夫曼算法基本思想: ⑴ 初始化:由给定的n个权值{w1,w2,…,wn}构造n棵只有一个根结点的二叉树,从而得到一个二叉树集合F={T1,T2,…,Tn}; ⑵ 选取与合并:在F中选取根结点的权值最小的两棵二叉树分别作为左、右子树构造一棵新的二叉树,这棵新二叉树的根结点的权值为其左、右子树根结点的权值之和; ⑶ 删除与加入:在F中删除作为左、右子树的两棵二叉树,并将新建立的二叉树加入到F中; ⑷ 重复⑵、⑶两步,当集合F中只剩下一棵二叉树时,这棵二叉树便是哈夫曼树。 哈夫曼树(Huffman Tree): 给定一组具有确定权值的叶子结点,可以构造出不同的二叉树,其中带权路径长度最小的二叉树称为哈夫曼树。 下面给出叶子结点的权值集合为W={2,3,4,5}的哈夫曼树的构造过程。 3 5 4 2 (a) 第一步 4 3 2 5 5 (b) 第二步 5 3 2 5 4 9 (c) 第三步 3 2 5 5 4 9 14 (d) 第四步 5 11 8 2 9 3 7 F={ } 2 3 5 1 初始化 2 选取与合并 给出叶子结点的权值集合为W={5,2,9,11, 8,3,7}的哈夫曼树的构造过程。 5 2 3 5 10 } 5 11 8 9 7 F={ 2 3 5 3 删除与加入 4 重复2 、3 两步 5 2 3 5 10 } 11 8 9 7 F={ 8 7 15 4 重复2 、3 两步 F={ 5 2 3 5 10 } 11 9 8 7 15 9 5 2 3 5 10 19 4 重复2 、3 两步 F={ } 11 8 7 15 9 5 2 3 5 10 19 11 26 8 7 15 4 重复2 、3 两步 F={ } 9 5 2 3 5 10 19 11 26 8 7 15 9 5 2 3 5 10 19 11 26 8 7 15 45 F={ } 直到F中只剩下一棵二叉树。 哈夫曼算法的存储结构 1. 设置一个数组huffTree[2n-1]保存哈夫曼树中各点的信息,数组元素的结点结构 。 weight lchild rchild parent 其中:weight:权值域,保存该结点的权值; lchild:指针域(游标),保存该结点的左孩子结点在数组中的下标; rchild:指针域(游标),保存该结点的右孩子结点在数组中的下标; parent:指针域(游标),保存该结点的双亲结点在数组中的下标。 struct element { int weight; int lchild, rchild, parent; }; 伪代码 1. 数组huffTree初始化,所有元素结点的双亲、左右孩子都置为-1; 2. 数组huffTree的前n个元素的权值置给定权值w[n]; 3. 进行n-1次合并 3.1 在二叉树集合中选取两个权值最小的根结点,其下标分别为i1, i2; 3.2 将二叉树i1、i2合并为一棵新的二叉树k; 5 6 2 4 weight parent lchi
您可能关注的文档
- [理学]矩阵和统计学回顾.pdf
- [理学]矩阵特征值与特征向量的计算方法.ppt
- [理学]矩阵的初等变换.ppt
- [理学]矩阵论11节.ppt
- [理学]着丝粒作图.ppt
- [理学]石群自动控制原理第2章.pdf
- [理学]矿物的物理性质.ppt
- [理学]石油炼制课件催化加氢.ppt
- [理学]真核藻类.ppt
- [理学]砌体结构03.ppt
- 半导体材料性能提升技术突破与应用案例分析报告.docx
- 半导体设备国产化政策支持下的关键技术突破与应用前景报告.docx
- 剧本杀市场2025年区域扩张策略研究报告.docx
- 剧本杀行业2025人才培训体系构建中的市场需求与供给分析.docx
- 剧本杀行业2025年人才培训行业人才培养模式创新与探索.docx
- 剧本杀行业2025年内容创作人才需求报告.docx
- 剧本杀行业2025年区域市场区域剧本市场消费者满意度与市场竞争力研究报告.docx
- 剧本杀市场2025年区域竞争态势下的区域合作策略分析报告.docx
- 剧本杀行业2025人才培训与行业人才培养模式创新.docx
- 剧本杀行业剧本创作人才心理素质培养报告.docx
文档评论(0)