数据结构第六章树和二叉树幻灯片.ppt

数据结构第六章树和二叉树幻灯片.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8 试以二叉链表做存储结构,编写求二叉树高度的非递归算法 Status btDepth (BiTree T, int depth){ depth=0; if (T !=NULL) { InitQueue( Q ); // 初始化队列 e.depth=1; e.p=T; EnQueue( Q, T ); // 根结点入队 while ( ! QueueEmpty (Q) ){ //队非空,循环 DeQueue ( Q, e ); // 出队 if ( e.depthdepth ) depth=e.depth; if ( e.P-lchild !=NULL ){ e1.p=e.p-lchild; e1.depth=e.depth+1; EnQueue ( Q, e1 ); } //左子树根结点入队 if ( e.P-rchild !=NULL ){ e1.p=e.p-rchild; e1.depth=e.depth+1; EnQueue ( Q, e1 ); } //右子树根结点入队 } //while } //if } 如图所示的二叉树,它的带权路径长度值: WPL=2×2+4×2+5×2+3×2=28。 2 5 3 4 在给定一组具有确定权值的叶结点,可以构造出不同的带权二叉树。 例:给出4个叶结点,设其权值分别为1,3,5,7,我们可以构造出形状不同的多个二叉树。这些形状不同的二叉树的带权路径长度将各不相同。 (a)WPL=1×2+3×2+5×2+7×2=32 1 5 7 3 1 5 7 3 (b)WPL=1×3+3×3+5×2+7×1=29 1 5 7 3 1 5 7 3 (c)WPL=1×2+3×3+5×3+7×1 =33 (d)WPL=7×3+5×3+3×2+1×1 =43 由此可见,由相同权值的一组叶子结点所构成的二叉树有不同的形态和不同的带权路径长度,那么如何找到带权路径长度最小的二叉树(即哈夫曼树)呢? 根据哈夫曼树的定义,一棵二叉树要使其WPL值最小,必须使权值越大的叶结点越靠近根结点,而权值越小的叶结点越远离根结点。 哈夫曼(Haffman)依据这一特点提出了一种方法,其基本思想是: (1)由给定的n个权值{W1,W2,…,Wn}构造n棵只有一个叶结点的二叉树,从而得到一个二叉树的集合F={T1,T2,…,Tn}; (2)在F中选取根结点的权值最小和次小的两棵二叉树作为左、右子树构造一棵新的二叉树,这棵新的二叉树根结点的权值为其左、右子树根结点权值之和; (3)在集合F中删除作为左、右子树的两棵二叉树,并将新建立的二叉树加入到集合F中; (4)重复(2)(3)两步,当F中只剩下一棵二叉树时,这棵二叉树便是所要建立的哈夫曼树。 1 5 7 3 第一步 1 5 7 3 第二步 1 5 7 3 第三步 1 5 7 3 第四步 其带权路径长度为29。 由此可见,对于同一组给定叶结点所构造的哈夫曼树,树的形状可能不同,但带权路径长度值是相同的,一定是最小的。 叶结点权值集合为W={1,3,5,7}的哈夫曼树的构造过程。 二、哈夫曼树的构造算法 设置一个结构数组HuffNode保存哈夫曼树中各结点的信息。 根据二叉树的性质可知,具有n个叶子结点的哈夫曼树共有2n-1个结点,所以数组HuffNode的大小设置为2n-1,数组元素的结构形式如下: 其中:weight域保存结点的权值,lchild和rchild域分别保存该结点的左、右孩子结点在数组HuffNode中的序号,从而建立起结点之间的关系。 parent域为了判定一个结点是否已加入到要建立的哈夫曼树中。初始时parent的值为0,当结点加入到树中时,该结点parent的值为其双亲结点在数组HuffNode中的序号。 构造哈夫曼树: (1)将由n个字符形成的n个叶结点存放到数组HuffN

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档