清华PPT6讲义.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
清华PPT6讲义

第6章 树与二叉树 ;;6.1 树的逻辑结构和基本操作;6.1 树的逻辑结构和基本操作(续);树的递归定义: 树(tree)T是n(n≥0)个结点的有限集合。如果n=0是空树;否则满足如下两个条件:第一有且只有一个称为根(root)的结点,根结点无前驱;第二除根之外其余n-1个结点可以划分成m(m>0)个互不相交的有限集T1,T2,T3,…,Tm ,其中Ti(i=1‥m)又是一棵树,称为根的子树。显然,这是递归定义。; 描述图6.1所示的家庭关系树的数据结构: Tree=(D,R),其中: ◆数据元素D={Va Vb Vc Vd Ve Vf Vg Vh Vi Vj Vk Vl Vm } ◆数据关系R={Va Vb Va Vc Va Vd Vb Ve Vb Vf Vc Vg Vd Vh Vd ViVd Vj Ve Vk Ve Vl Vh Vm }。 树的根为A,根结点无前驱。 {D-{A}}存在三个不相交的划分: D1={ Vb Ve Vf Vk Vl } D2={ Vc Vg } D3={ Vd Vh Vi Vj Vm } ;除此之外,还有其他树的示例:如下图6.2所示。 ;6.1 树的逻辑结构和基本操作(续);6.1 树的逻辑结构和基本操作(续);6.1 树的逻辑结构和基本操作(续);6.1 树的逻辑结构和基本操作(续);6.1 树的逻辑结构和基本操作(续);6.1 树的逻辑结构和基本操作(续);6.1 树的逻辑结构和基本操作(续);6.1 树的逻辑结构和基本操作(续);6.2 二叉树;6.2.1 二叉树的定义及逻辑结构(续);6.2.1 二叉树的定义及逻辑结构(续);6.2.1 二叉树的定义及逻辑结构(续);6.2.1 二叉树的定义及逻辑结构(续);6.2.1 二叉树的定义及逻辑结构(续);6.2.1 二叉树的定义及逻辑结构(续);6.2.1 二叉树的定义及逻辑结构(续);6.2.2 二叉树的性质;6.2.2 二叉树的性质(续);满二叉树:一棵二叉树如果深度为k,就有有2k-1个结点,则二叉树是满二叉树。如图6.4(b)所示二叉树,深度为4,有24-1=15个结点,是满二叉树。 完全二叉树:先对满二叉树的结点从根开始自上而下、从左至右进行连续编号,根结点编号为1,第K层上的结点从左到右的编号为: 2K-1~2K-1;当以同样的方式对一棵二叉树结点编号时,与满二叉树中相同层次与相应位置的结点编号一一对应,称之为完全二叉树。如下图6.4(a) 所示。;1;性质4 有n个结点的完全二叉树,如果深度为K那么 K=|log2n|+1 证明:由于深度为K的完全二叉树可能有结点2 k-1~2 k-1个,于是有: 当k1时 则;故 是小数部分 因此 证毕 性质5 如果完全二叉树有n个结点,则任意结点i (1≤i≤n),有: (1)若i>1,则i的双亲是i/2;若i=1则i是根无双亲; (2)若2i≤n,则i的左孩子是2i;若2i>n则i无左孩子; (3)若2i+1≤n,则i的右孩子2i+1;若2i+1>n,则i无右孩子。 用数学归纳法很容易证明(略)。;6.2.3 二叉树的存储结构;6.2.3 二叉树的存储结构(续); 显然,这种存储方式对于一棵完全二叉树来说是非常方便的,既不浪费空间,又可以根据公式计算出每一个结点的双亲、左、右孩子结点。这样在该存储结构中实现了数据与关系的存储。 一般的二叉树如何存储?首先,必须按照完全二叉树结点的对应位置进行存储,图6.5(b)存储结构如图6.6 (b)所示。在6.6 (b)图中,与完全二叉树对应缺少的部分是6.5(b)中C结点(存储在3号单元中)的左孩子(存储在6号单元)、D结点(存储在4号单元中)的左、右孩子(8、9号单元),用空‘φ’表示。如果一棵二叉树结点不多却很深,存储时就要存储很多的空,从而造成空间浪费。; 一种极端的情况二叉树的树形如图6.5(c)所示,存储结构如图6.6(c)所示。可以看出,对于一个深度为k的二叉树,在最坏的情况下(每个结点只有右孩子或只有左孩子)需要占用2k-1~2k-1个存储单元,而实际该二叉树只有k个结点,空间的浪费太大。这是二叉树顺序存储结构的一大缺点。;;2.链式存储结构 最简单的链式结构是每个结点由基本元素、左孩子、右孩子三个域组成。 定义如下: typedef strcut tnode{

文档评论(0)

djdjix + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档