第四章树与树的表示(一)_第1页
第四章树与树的表示(一)_第2页
第四章树与树的表示(一)_第3页
第四章树与树的表示(一)_第4页
第四章树与树的表示(一)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 4.1树与树的表示 树型结构是一类非常重要的非线性结构。直观地,树型结构是以分支关系定义的层次结构。 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构;在数据库系统中,可用树来组织信息;在分析算法的行为时,可用树来描述其执行过程等等。 本章将详细讨论树和二叉树数据结构,主要介绍树和二叉树的概念、术语,二叉树的遍历算法。树和二叉树的各种存储结构以及建立在各种存储结构上的操作及应用等。什么是树客观世界中许多事物存在层次关系人类社会家谱社会组织结构图书信息管理什么是树分层次组织在管理上具有更高的效率!数据管理的基本操作之一:查找如何实现有效率的查找?查找(Search

2、ing)查找:根据某个给定关键字K ,从集合R中找出关键字与K相同的记录静态查找:集合中记录是固定的 没有插入和删除操作,只有查找动态查找:集合中记录是动态变化的 除查找,还可能发生插入和删除45689静态查找0K方法1:顺序查找(数组存储)Tbl10123int SequentialSearch (StaticTable *Tbl, ElementType K) /*在表在表Tbl1Tbln中查找关键字为中查找关键字为K的数据元素的数据元素*/int i;Tbl-Element0 = K; /*建立哨兵建立哨兵*/for(i = Tbl-Length; Tbl-Elementi!= K; i

3、-);return i; /*查找成功返回所在单元下标;不成功返回查找成功返回所在单元下标;不成功返回0*/顺序查找算法的时间复杂度为O(n)。710方法2:二分查找(Binary Search) 假设n个数据元素的关键字满足有序(比如:小到大)并且是连续存放(数组),那么可以进行二分查找。例 假设有13个数据元素,按关键字由小到大顺序存放.二分查找关健字为444的数据元素过程如下:51639455198100202226321 368 444 501123456789101112131、left = 1, right = 13; mid = (1+13)/2 = 7:2、left = mid

4、+1=8, right = 13; mid = (8+13)/2 = 10:100 444;321 Length;/*初始左边界初始左边界*/*初始右边界初始右边界*/while ( left = right )mid = (left+right)/2; /*计算中间元素坐标计算中间元素坐标*/if( K Elementmid)right = mid-1; /*调整右边界调整右边界*/else if( K Tbl-Elementmid) left = mid+1;/*调整左边界调整左边界*/else return mid;return NotFound;/*查找成功,返回数据元素的下标查找成功

5、,返回数据元素的下标*/*查找不成功,返回查找不成功,返回-1*/ 二分查找算法具有对数的时间复杂度O(logN)例 仍然以上面13个数据元素构成的有序线性表为例二分查找关健字为 43 的数据元素如下:51639455198100202226321 368 444 501123456789101112131、left = 1, right = 13; mid = (1+13)/2 = 7:100 43;2、 left = 1, right = mid-1= 6; mid = (1+6)/2 = 3: 39 43;4、left = 4, right = mid-1= 4; mid = (4+4)

6、/2 = 4: 45 43;5、left = 4, right = mid-1= 3; left right ? 查找失败,结束;6 11个元素的二分查找判定树 判定树上每个结点需要的查找次数刚好为该结点所在的层数; 查找成功时查找次数不会超过判39定树的深度 n个结点的判定树的深度14710为log2n+1. ASL = (4*4+4*3+2*2+1)/11 = 325811二分查找的启示?LM4.2树的定义树(Tree): n(n0)个结点构成的有限集合。当n=0时,称为空树;对于任一棵非空树(n 0),它具备以下性质: 树中有一个称为“根(Root)”的特殊结点,用 r 表示; 其余结点

7、可分为m(m0)个互不相交的有限集T1,T2,. ,Tm,其中每个集合本身又是一棵树,称为原来树的“子树(SubTree)”ABCDEFBGCHIDJKEFGLHIMJK(b) 子树TA1(c) 子树TA2(d) 子树TA3(e)子树子树TA4(a) 树TD 树与非树?AAABCDBCDBCDEFGHEFGHEFGH 子树是不相交的; 除了根结点外,每个结点有且仅有一个父结点; 一棵N个结点的树有N-1条边。IJKMA树的一些基本术语1. 结点的度(Degree):结点的子树个数2. 树的度:树的所有结点中最大的度数3. 叶结点(Leaf):度为0的结点4. 父结点(Parent):有子树的结

8、点是其子树BCD的根结点的父结点FGHIJK5. 子结点(Child):若A结点是B结点的父结点,则称B结点是A结点的子结点;子结点也称孩子结点。6. 兄弟结点(Sibling):具有同一父结点的各结点彼此是兄弟结点。LMA树的一些基本术语7. 路径和路径长度:从结点n1到nk的路径为一个结点序列n1 , n2 , , nk , ni是 ni+1的父结点。路径所包含边的个数为路径的长度。8. 祖先结点(Ancestor):沿树根到某一结点路BCD径上的所有结点都是这个结点的祖先结点。9. 子孙结点(Descendant):某一结点的子树FGHIJK中的所有结点是这个结点的子孙。10. 结点的层

9、次(Level):规定根结点在1层,其它任一结点的层数是其父结点的层数加1。11. 树的深度(Depth):树中所有结点中的最大层次是这棵树的深度。LM12.有序树和无序树:对于一棵树,若其中每一个结点的子树(若有)具有一定的次序,则该树称为有序树,否则称为无序树。13.森林(forest):是m(m0)棵互不相交的树的集合。显然,若将一棵树的根结点删除,剩余的子树就构成了森林。树的表示ABCDEFGHIJKLMBEFKLACDGHIJM儿子-兄弟表示法ElementFirstChild NextSiblingAANBCDEFGHIJBCDNKLMEFN NGN NHNIJN NKNLN NM

10、N NAN45BCDNEFNNGNNHINJNNKNLNNElementMNNLeftLeftRight二叉树Right4.2 二叉树及存储结构二叉树(Binary tree)是n(n0)个结点的有限集合。若n=0时称为空树,否则: 有且只有一个特殊的称为树的根(Root)结点; 若n1时,其余的结点被分成为二个互不相交的子集T1,T2,分别称之为左、右子树,并且左、右子树又都是二叉树。 由此可知,二叉树的定义是递归的。 二叉树具体五种基本形态TLTRTLTR(a)(b)(c)(d)(e) 二叉树的子树有左右顺序之分空树空树只含根结点只含根结点右子树为空树右子树为空树左子树为空树左子树为空树左

11、右子树均不左右子树均不为空树为空树特殊二叉树 斜二叉树(Skewed Binary Tree)A 完美二叉树(Perfect Binary Tree) 满二叉树(Full Binary Tree)1AB23C4B56C7DEFGD89 1011 1213 1415 完全二叉树(Complete Binary Tree)有n个结点的二叉树,对树中结点按HIJ2K L1AM N3O从上至下、从左到右顺序进行编号,编号为i(1 i n)结点与满二叉树中编号为 i 结点在二叉树中位置相同84DB95E106FC7GHJK894101151213614157213894101152112673(a) 满

12、二叉树满二叉树(b) 完全二叉树完全二叉树1362455674213(c) 非完全二叉树非完全二叉树图图6-4 特殊形态的特殊形态的二叉二叉树树二叉树几个重要性质性质1: 在二叉树的第i层上至多有2i-1个结点。(i1)性质2: 深度为k的二叉树上至多含2k-1个结点。(k1)性质3: 对任何一棵二叉树,若它含有n0个叶子结点、n2个度为2的结点, A 则必存在关系式:n0 = n2+1。 BCDJEKFH n0 = 4,n1 = 2 n2 = 3; n0 = n2 +1满二叉树的特点: 基本特点是每一层上的结点数总是最大结点数。 满二叉树的所有的支结点都有左、右子树。 可对满二叉树的结点进行

13、连续编号,若规定从根结点开始,按“自上而下、自左至右”的原则进行。完全二叉树(Complete Binary Tree):如果深度为k,由n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1到n的结点一一对应,该二叉树称为完全二叉树。 或深度为k的满二叉树中编号从1到n的前n个结点构成了一棵深度为k的完全二叉树。其中 2k-1 n2k-1 。 完全二叉树是满二叉树的一部分,而满二叉树是完全二叉树的特例。完全二叉树的特点: 若完全二叉树的深度为k ,则所有的叶子结点都出现在第k层或k-1层。对于任一结点,如果其右子树的最大层次为l,则其左子树的最大层次为l或l+1。性质4:n个

14、结点的完全二叉树深度为:2n +1。 其中符号: x表示不大于x的最大整数。 x 表示不小于x的最小整数。,二叉树的抽象数据类型定义类型名称:二叉树数据对象集:一个有穷的结点集合。若不为空,则由根结点和其左、右二叉子树组成。操作集: BT BinTree, Item ElementType,重要操作有:1、Boolean IsEmpty( BinTree BT ): 判别BT是否为空;2、void Traversal( BinTree BT ):遍历,按某顺序访问每个结点;:遍历,按某顺序访问每个结点;3、BinTree CreatBinTree( ):创建一个二叉树。:创建一个二叉树。常用的

15、遍历方法有: void PreOrderTraversal( BinTree BT ):先序:先序-根、左子树、右子树;根、左子树、右子树; void InOrderTraversal( BinTree BT ): 中序-左子树、根、右子树; void PostOrderTraversal( BinTree BT ):后序:后序-左子树、右子树、根左子树、右子树、根 void LevelOrderTraversal( BinTree BT ):层次遍历,从上到下、从左到右:层次遍历,从上到下、从左到右5/25二叉树的存储结构1. 顺序存储结构用一组地址连续的存储单元依次“自上而下、自左至右”存储完全二叉树的数据元素。对于完全二叉树上编号为i的结点元素存储在一维数组的下标值为i的分 量中。结点序号A1B2O3C4S5M6Q7W8K9n个结点的完全二叉树的结点父子关系:非根结点(序号 i 1)的父结点的序号是 i / 2 ;当 i / 2 =0时,该结点是树的根结点。结点(序号为 i )的左孩子结点的序号是 2i,(若2 i n,没有左孩子);结点(序号为 i )的右孩子结点的序号是 2i+1,(若2 i +1 n,没有右孩子); 一般二叉树也可以采用这种结构,但会造成空间浪费1A2A3BO4B56O7MMC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论