第七章 二叉树及其应用.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
01/06/2002 数据结构讲义 第七章 二叉树及其应用 二叉树的存储结构--顺序存储 二叉树的遍历--概念部分 线索二叉树--概念 线索二叉树--线索化算法 线索二叉树--查找算法 学生练习3 二叉树的应用1--基本操作实现 按先序遍历序列建立二叉树的二叉链表 二叉树应用――哈夫曼树 哈夫曼树--基本概念 * 二叉树的基本概念 二叉树的存储结构 二叉树的遍历 线索二叉树 二叉树的应用 二叉树的基本概念 二叉树的定义:含有限个结点的有序树,且结点的最大出度为2。 基本形态:有五种,如下图所示。 空二叉树 单结点二叉树 左子树为空 右子树为空 左右子树均不为空 基本术语:根、父结点、孩子结点、兄弟结点、结点的度、层次、高度、叶子。 逻辑结构:除根外,每个结点只有一个父结点;任意结点最多有2个孩子。 满二叉树:同层结点要么都有两个孩子,要么都是叶。 完全二叉树:满二叉树从右到左连续删除若干叶子所得到的二叉树。 二叉树的性质 二叉树的第I层最多有2I-1个结点。深度为k的二叉树最多有2k-1个结点。(I0) 非空二叉树的叶子数=度为2的结点数+1。 有n个结点的完全二叉树的高度为[log2n]+1。 若完全二叉树按照“从上到下,每层从左到右,根结点编号为1”的方式编号,则编号为I的结点,其孩子编号为2I和2I+1,其父编号为I/2。 学生练习1 问题一:某二叉树有20个叶子,10个结点只有左孩子,15个结点只有右孩子。求该二叉树的结点数。 问题二:有100个结点的完全二叉树有多少个叶子? 问题三:有256个结点的完全二叉树的深度是多少? 解:n=n0+n1+n2=20+(10+15)+(20-1)=64 解:深度为[log2256]+1=9。 解:对该二叉树顺序编号,第100个结点(最后一个结点)的编号为100,其父结点编号为100/2=50。因此,其父结点的右兄弟51无孩子,故叶子编号为51-100,共有叶子50个。 问题四:同层结点要么都有K个孩子,要么都是叶,这种有序树称为满K叉树。一个深度为L的满K叉树按层次及左右顺序从1开始对全部结点编号,求: 第m层有几个结点? 编号为n的结点的父结点、第i孩子结点的编号是多少? 编号为n的结点有右兄弟的条件是什么? 解:第1层1个结点,第2层K个结点,第3层K2个结点,…第m层Km-1个结点。 设编号为n的结点为第a层左起第b个结点,则n=(1+k+…+ka-2)+b,且它的左起第1个孩子的编号为(1+k+…+ka-1)+(b-1)k+1=(n-b+ka-1)+(b-1)k+1=k(n-1)+2。其中由n-b=(ka-1-1)/(k-1)得ka-1=(n-b)(k-1)+1。 故编号为n的结点的孩子编号分别为:k(n-1)+2、k(n-1)+3、…、k(n-1)+k+1。其父结点的编号为n/k(学生思考:为什么?)。 由上可知,编号为n的结点,其最后一个孩子的编号为nk+1。 而编号为n的结点的父结点编号n/k 所以,编号为n的结点有右兄弟的条件是:n≠(n/k)k+1 学生练习2 我们已经知道:当采取自上而下、自左至右的顺序依次对完全二叉树的结点编号时,第I个结点的编号就是I,且其孩子编号分别为2I、2I+1。而其父结点的编号为I/2。 因此,完全二叉树可采用顺序存储结构。树中结点的序号可以唯一地反映出结点之间的逻辑关系,这样既能够最大可能地节省存储空间,又可以利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。 对于一般的二叉树,如果仍按从上至下和从左到右的顺序将树中的结点顺序存储在一维数组中,则数组元素下标之间的关系不能够反映二叉树中结点之间的逻辑关系,只有增添一些并不存在的空结点,使之成为一棵完全二叉树的形式,然后再用一维数组顺序存储。不过这样做浪费空间。 A B C D E A B C D E 顺序存储 A B C E A B C ^ E 顺序存储 二叉树的存储结构--链接存储 二叉链表存储:链表中每个结点由三个域组成,除数据域data外,还有两个指针域lchild、rchild,分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。结点的存储的结构为: typedef struct node{ datatype data; struct node *lchild,*rchild; }Bitree; 三叉链表存储:链表中每个结点由四个域组成:data数据域、指针域lchild、rchild和parent域为指向该结点双亲结点和父结点的指针。这种存储结构既便于查找孩子结点,又便于查找双亲结点;但是,相对于二叉链表存储结构而言,它增加了空间开销。结点的存储的结构为:

文档评论(0)

38号店铺 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档