- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二叉链表存储
* * * * * * * 中序遍历 中序遍历的定义为: 中序遍历第一棵树的根结点的子树; 访问森林中第一棵树的根结点; 中序遍历去掉第一棵树后的子森林。 对于下图所示的森林进行中序遍历,得到的结果序列为:B A D E F C J H K I GK 根据森林与二叉树的转换关系以及森林和二叉树的遍历定义可以推知,森林的前序遍历和中序遍历与所转换的二叉树的先序遍历和中序遍历的结果序列相同。 6.赫夫曼树及其应用 1、哈夫曼树 2、哈夫曼编码 1、哈夫曼树 1.1.带权二叉树 1.2.给定确定权值的带权二叉树 1.3.哈夫曼树的建立 1.4.哈夫曼树构造算法分析 1.5.哈夫曼树构造算法描述 1.1、带权二叉树 最优二叉树,也称哈夫曼(Haffman)树,是指对于一组带有确定权值的叶结点,构造的具有最小带权路径长度的二叉树。 二叉树的带权路径长度 在前面我们介绍过路径和结点的路径长度的概念,而二叉树的路径长度则是指由根结点到所有叶结点的路径长度之和。 如果二叉树中的叶结点都具有一定的权值,则可将这一概念加以推广。设二叉树具有n个带权值的叶结点,那么从根结点到各个叶结点的路径长度与相应结点权值的乘积之和叫做二叉树的带权路径长度,记为: 二叉树的带权路径长度示例 其中Wk为第k个叶结点的权值,Lk 为第k个叶结点的路径长度。 如右图所示的二叉树,它的带权路径长度值:WPL=2×2+4×2+5×2+3×2=28。 1.2.给定确定权值的带权二叉树 在给定一组具有确定权值的叶结点,可以构造出不同的带权二叉树。例如,给出4个叶结点,设其权值分别为1,3,5,7,我们可以构造出形状不同的多个二叉树。这些形状不同的二叉树的带权路径长度将各不相同。 图给出了其中5个不同形状的二叉树。 给定确定权值的带权二叉树示例 这五棵树的带权路径长度分别为: (a)WPL=1×2+3×2+5×2+7×2=32 (b)WPL=1×3+3×3+5×2+7×1=29 (c)WPL=1×2+3×3+5×3+7×1=33 (d)WPL=7×3+5×3+3×2+1×1=43 (e)WPL=7×1+5×2+3×3+1×3=29 1.3.哈夫曼树的建立 由此可见,由相同权值的一组叶子结点所构成的二叉树有不同的形态和不同的带权路径长度,那么如何找到带权路径长度最小的二叉树(即哈夫曼树)呢? 根据哈夫曼树的定义,一棵二叉树要使其WPL值最小,必须使权值越大的叶结点越靠近根结点,而权值越小的叶结点越远离根结点。 哈夫曼(Haffman)算法: (1)由给定的n个权值{W1,W2,…,Wn}构造n棵只有一个叶结点的二叉树,从而得到一个二叉树的集合F={T1,T2,…,Tn}; (2)在F中选取根结点的权值最小和次小的两棵二叉树作为左、右子树构造一棵新的二叉树,这棵新的二叉树根结点的权值为其左、右子树根结点权值之和; (3)在集合F中删除作为左、右子树的两棵二叉树,并将新建立的二叉树加入到集合F中; (4)重复(2)(3)两步,当F中只剩下一棵二叉树时,这棵二叉树便是所要建立的哈夫曼树。 哈夫曼算法示例 1.4.哈夫曼树构造算法分析 在构造哈夫曼树时,可以设置一个结构数组HuffNode保存哈夫曼树中各结点的信息,根据二叉树的性质可知,具有n个叶子结点的哈夫曼树共有2n-1个结点,所以数组HuffNode的大小设置为2n-1,数组元素的结构形式如下: weight域保存结点的权值,lchild和rchild域分别保存该结点的左、右孩子结点在数组HuffNode中的序号,从而建立起结点之间的关系。 1.4.哈夫曼树构造算法分析 为了判定一个结点是否已加入到要建立的哈夫曼树中,可通过parent域的值来确定。初始时parent的值为-1,当结点加入到树中时,该结点parent的值为其双亲结点在数组HuffNode中的序号,就不会是-1了。 构造哈夫曼树时,首先将由n个字符形成的n个叶结点存放到数组HuffNode的前n个分量中,然后根据前面介绍的哈夫曼方法的基本思想,不断将两个小子树合并为一个较大的子树,每次构成的新子树的根结点顺序放到HuffNode数组中的前n个分量的后面。 1.5.哈夫曼树构造算法描述 #define MAXVALUE 10000 /*定义最大权值*/ #define MAXLEAF 30 /*定义哈夫曼树中叶子结点个数*/ #define MAXNODE MAXLEAF*2-1 typedef struct { int weight; int parent; int lchild; int rchild;
您可能关注的文档
最近下载
- 高中英语选择性必修4优质课公开课Unit 4 Project.pdf
- 精品解析:山东省济宁市实验中学2024-2025学年高一上学期12月月考历史试题(原卷版).docx VIP
- DB4413T 29-2022城市园林绿化养护管理规范.docx
- 2025青鸟消防JBF-11S控制器使用说明书.docx VIP
- 中国古代神话故事《天帝颛顼》.doc VIP
- 2019年输变电工程设计竞赛创新亮点.pdf
- (人教版2024)八年级地理上册新教材解读课件.pptx
- 2025年新人教版三年级上册语文全册教案.pdf
- 高中英语2025届高考高频词汇(共 688个 ).doc VIP
- 耐药结核病全口服短程治疗专家共识(2025)解读PPT课件.pptx VIP
文档评论(0)