网站大量收购独家精品文档,联系QQ:2885784924

数据结构与算法第6章树与二叉树新.pptVIP

  1. 1、本文档共112页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与算法第6章树与二叉树新

性质1: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 哈夫曼树及其应用 哈夫曼编码 哈夫曼编码的主要应用是实现数据压缩。例如,给出一段报文:CAST CAST SAT AT A TASA。字符集合是{C, A, S, T},各个字符出现的频度(次数)是W={2, 7, 4, 5}。若给每个字符以等长编码:A(00), T(10), C(01), S(11),则总编码长度为(2+7+4+5)×2 = 36。若按各个字符出现的概率不同而进行不等长编码,可望减小总编码长度。各字符出现概率为{2/18, 7/18, 4/18, 5/18},化整为{2, 7, 4, 5}。以它们为各叶结点上的权值,建立哈夫曼树。左分支赋0,右分支赋1,得哈夫曼编码(变长编码):A(0), T(10), C(110), S(111),如下图所示。它的总编码长度为7×1+5×2+(2+4)×3 = 35,比等长编码的情形(36)要短,总编码长度正好等于哈夫曼树的带权路径长度WPL。哈夫曼编码是一种前缀编码。所谓前缀编码,是指任一个字符的编码都不是另一个字符的编码的前缀的编码。前缀编码解码时不会产生混淆。 哈夫曼树及其应用 下面讨论哈夫曼编码的具体实现方法。由哈夫曼树的特点可知,树中的所有结点的度要么为2,要么为0,即,不包含度为1的结点,则一棵带有n个叶子结点的哈夫曼树共有2n–1个结点。在已知叶子结点总数的情况下,可用一个大小为2n–1的一维数组来存储。对于结点结构,由于编码是通过在所构成的哈夫曼树上从叶子结点出发一直到根结点所经过的路径求得的,而译码则是从根结点出发一直到叶子所经过的路径来获得的,因此,对每个结点而言,采用既包含指向双亲结点的信息,又包含指向子结点的信息较为合适,由此给出下述存储结构。 哈夫曼树及其应用 哈夫曼树存储的类描述: 哈夫曼树及其应用 哈夫曼树类: 哈夫曼树及其应用 哈夫曼树及其应用 构造函数: 建立哈夫曼树: 哈夫曼树及其应用 哈夫曼树及其应用 求哈夫曼编码: 哈夫曼树及其应用 例6-4 已知在一篇短文中仅包含6种不同的字符,各字符出现的次数分别为4, 7, 12, 18, 25, 34。为节约存储空间,试为这6种字符设计哈夫曼编码。 (1)构造哈夫曼树。根据6种字符出现的次数可建立哈夫曼树叶子结点的权重集合w = {4, 7, 12, 18, 25, 34},n = 6。按上述算法可构造一棵哈夫曼树如图(a)所示,各字符的哈夫曼编码如图(b)所示。 例6-4 (2)哈夫曼树的带权路径长度值为(4+7)×5+13×4+17×3+25×2+34=242,即该文档原有的字符总数为4+7+12+18+25+34=100。采用哈夫曼编码方式进行存储时,这100个字符所占用的空间为242位。而采用等长方式,每个字符需要3位,共需要300位。由此可见,哈夫曼编码能有效地节约空间。 例6-5 试编写算法,对给定权值w构造哈夫曼树T。 由于在哈夫曼树上没有度为1的结点,因此,有k个叶子的哈夫曼树有k–1个非终端结点,共有2k–1个结点。由于结点数已知且固定不变,可采用静态链表作为存储结构。设置一个大小为2k–1的数组,令数组的每个元素都由4个域组成,它们分别用于存储权值,双亲指针和左、右孩子指针,其类型定义如下: 例6-5 在这种存储结构上的哈夫曼算法如下: 本 章 总 结 基本内容 本章主要介绍了二叉树的前序、中序、后序三种遍历算法和二叉树的线索化,树和森林的定义,树的存储结构及遍历,树、森林与二叉树之间的相互转换方法,哈夫曼树(最优二叉树)的构造方法及其应用。 基本要求 (1)掌握二叉树形结构的基本概念、术语、存储结构 ① 清楚二叉树的逻辑结构、形式化定义、术语及其分层和非线性特性; ② 熟悉二叉树的基本形态、特点、基本运算; ③ 知道完全二叉树与满二叉树的定义、特点和区别; ④ 掌握二叉树的5条重要性质; ⑤ 了解二叉树的顺序存储结构的组织形式和实现方法; 本 章 总 结 ⑥ 知道二叉链表的类型定义、结点形式及二叉链表的图示表示; ⑦ 了解三叉链表的结点形式和组织及实现方法。 (2)掌握二叉树遍历及线索化的方法和算法 ① 深入了解并掌握在二叉树上进行前序、中序和后序遍历的基本思想及其递归与非递归遍历算法; ② 深刻理解三种递归遍历算法(包括非递归算法)的执行过程及它们的异同; ③ 掌握二叉树线索化的基本思想和线索化方法及线索二叉树的表示形式(线索链表)

文档评论(0)

hello118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档