数据结构7-8.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构7-8.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构
- 资源描述:
-
1、数据结构数据结构第七章第七章 树和二叉树树和二叉树 这是一类这是一类非线性结构非线性结构。这类结构中至少存在一个数据。这类结构中至少存在一个数据元素,它具有两个或两个以上的直接后继或直接前驱。元素,它具有两个或两个以上的直接后继或直接前驱。 树型结构是一类十分重要的非线性结构,它的树型结构是一类十分重要的非线性结构,它的特点特点是是树中结点之间具有树中结点之间具有层次关系层次关系。常用到的两种结构是树和二。常用到的两种结构是树和二叉树。叉树。 本章介绍树和二叉树的基本概念、存储结构及一些常本章介绍树和二叉树的基本概念、存储结构及一些常用操作的算法实现。重点为二叉树内容。用操作的算法实现。重点为
2、二叉树内容。数据结构数据结构7.1 树树 树的定义树的定义 树树(Tree)是是 n(n0)个结点构成的集合。个结点构成的集合。n=0的的树称树称为空树;对为空树;对n0的树的树T,有:,有: 当当 n1时时,除根结点外其它结点被分成,除根结点外其它结点被分成 m(m0)个个互不相交的集合互不相交的集合T1 ,T2 , , Tm ,其中每个集合,其中每个集合Ti(1im)本身又是一棵结构与树类同的子树。本身又是一棵结构与树类同的子树。 有一个特殊的结点称为树的根结点,根结点没有有一个特殊的结点称为树的根结点,根结点没有前驱结点。前驱结点。数据结构数据结构特特点点 根结点没有前驱结点,除根结点之
3、外的所有结根结点没有前驱结点,除根结点之外的所有结点有且只有一个前驱结点;树中所有结点可以有零点有且只有一个前驱结点;树中所有结点可以有零个或多个后继结点。个或多个后继结点。 树结构的用途很广泛,如磁盘文件目录管理就是树树结构的用途很广泛,如磁盘文件目录管理就是树结构的一个典型应用。结构的一个典型应用。LIUWUWANGDOSWINDOWSUSERSC:FILE1FILE2FILEn数据结构数据结构 A D B C E F G H I J 结点、结点、 结点的度、结点的度、叶结点、叶结点、 分枝结点、分枝结点、孩子结点、双亲结点、孩子结点、双亲结点、 兄弟结点、兄弟结点、树的度、树的度、 结点
4、的层次、树的深度、结点的层次、树的深度、无序树、无序树、 有序树、有序树、 森林森林树的常用术语树的常用术语数据结构数据结构 树的表示方法树的表示方法常常用用方方法法直观表示法直观表示法主要用于直观描述树的逻辑结构主要用于直观描述树的逻辑结构形式化表示法形式化表示法主要用于树的理论描述主要用于树的理论描述T = ( D , R ) 凹入表示法凹入表示法主要用于树的屏幕和打印机显示主要用于树的屏幕和打印机显示数据结构数据结构 树的抽象数据类型树的抽象数据类型数据集合数据集合 是树的结点集合,是树的结点集合,每个结点由数据元素和构造数据每个结点由数据元素和构造数据元素之间关系的指针组成。元素之间关
5、系的指针组成。操作集合操作集合 数据集合上可进行的操作,如:创建、撤消、双亲结数据集合上可进行的操作,如:创建、撤消、双亲结点、左孩子结点、遍历树等。点、左孩子结点、遍历树等。(具体实现要结合存储结构)(具体实现要结合存储结构)数据结构数据结构 要求存储结构不但能存储各结点本身的要求存储结构不但能存储各结点本身的数据信息数据信息,还要能唯一地反映树中各结点之间的还要能唯一地反映树中各结点之间的逻辑关系逻辑关系。 树的存储结构树的存储结构双亲表示法双亲表示法 利用利用“树中每个结点除根结点外有且仅有一个双亲树中每个结点除根结点外有且仅有一个双亲”这这一性质。用一组连续的存储空间(一维数组)存储树
6、中的一性质。用一组连续的存储空间(一维数组)存储树中的各结点,其中每个元素表示树中的一个结点,包括结点本各结点,其中每个元素表示树中的一个结点,包括结点本身的身的信息信息和结点的和结点的双亲结点在数组中的序号双亲结点在数组中的序号。数据结构数据结构图图(a)所示的一棵树,其双亲表示法如图所示的一棵树,其双亲表示法如图(b)所示所示 A B D F E H I C G (a)dataparent012345678ABCDEFGHI00111244-1(b)数据结构数据结构 每个结点除存放每个结点除存放结点本身的信息结点本身的信息外,还存放外,还存放结点与孩结点与孩子之间的关系子之间的关系。通过指
7、针反映树中各结点之间的关系。通过指针反映树中各结点之间的关系。 设置结点指针域个数的两种方法:设置结点指针域个数的两种方法: 每个结点指针域的个数等于该结点的度数(每个结点指针域的个数等于该结点的度数(树树 中各结点中各结点不同构不同构) 每个结点指针域的个数等于该树的度数(每个结点指针域的个数等于该树的度数(树中树中 各结点各结点同构同构)孩子表示法孩子表示法数据结构数据结构图图(a)所示的一棵树,其孩子表示法如图所示的一棵树,其孩子表示法如图(b)所示所示 A B D F E H I C G (a)(b)ABECGFIHD root数据结构数据结构 将双亲表示将双亲表示法和孩子表示法法和孩
8、子表示法结合起来,各结结合起来,各结点的孩子结点分点的孩子结点分别组成单链表。别组成单链表。A-1BCDEFG0HI0111244dataparent01234567812345678双亲孩子表示法双亲孩子表示法数据结构数据结构 每个结点除每个结点除本身的信息外,本身的信息外,有两个分别指向有两个分别指向该结点的第一个该结点的第一个孩子结点和下一孩子结点和下一个兄弟结点的指个兄弟结点的指针域。针域。A B C D E FGHIroot孩子兄弟表示法孩子兄弟表示法数据结构数据结构7.2 二叉二叉树树 二叉树的定义二叉树的定义 二叉树二叉树 ( Binary Tree ) 是是 n ( n 0 )
9、 个有限结点个有限结点构成的集合,构成的集合,n = 0 的的二叉二叉树树称为空二叉树;称为空二叉树;n 0 的的二叉树由一个根结点和两个互不相交的、分别称为二叉树由一个根结点和两个互不相交的、分别称为左左子树子树和和右子树右子树的子二叉树组成。的子二叉树组成。数据结构数据结构 A B G C E F H I D 每个结点最多只有两个每个结点最多只有两个孩子,且有左右之分。孩子,且有左右之分。图例图例(a)(b)左子树(c)右子树(d)左子树 右子树(e)五种基本形态五种基本形态数据结构数据结构 满二叉树:满二叉树:在一棵二叉树中,若所有分支结点都存在一棵二叉树中,若所有分支结点都存在左子树和
10、右子树,并且所有叶结点都在同一层上,这在左子树和右子树,并且所有叶结点都在同一层上,这样的二叉树称为满二叉树。样的二叉树称为满二叉树。 A B C D E F G 1 2 3 4 5 6 7 (a) 满二叉树满二叉树 A B C D E 1 2 3 4 5 (b) 非满二叉树非满二叉树两种特殊的二叉树两种特殊的二叉树数据结构数据结构 完全二叉树:完全二叉树:若一棵具有若一棵具有 n 个结点的二叉树的结个结点的二叉树的结构与满二叉树的前构与满二叉树的前 n 个结点的结构相同,这样的二叉个结点的结构相同,这样的二叉树称为完全二叉树。树称为完全二叉树。 A B C D E F G 1 2 3 4 5
11、 6 7 (a) 满二叉树满二叉树 A B C D E F 1 2 3 4 5 6 (b) 完全二叉树完全二叉树 A B C D F 1 2 3 4 5 (c) 非完全二叉树非完全二叉树数据结构数据结构 二叉树抽象数据类型二叉树抽象数据类型数据集合数据集合 二叉树的结点集合,二叉树的结点集合,每个结点由数据元素和构造数每个结点由数据元素和构造数据元素之间关系的指针组成的数据。据元素之间关系的指针组成的数据。操作集合操作集合 数据集合上可进行的操作,如:创建、撤消、左插入数据集合上可进行的操作,如:创建、撤消、左插入结点、遍历二叉树等。结点、遍历二叉树等。(具体实现要结合存储结构)(具体实现要结
12、合存储结构)数据结构数据结构 二叉树的性质二叉树的性质 若规定根结点的层次为若规定根结点的层次为0,则,则一棵非空一棵非空二叉树的第二叉树的第i 层上最多有层上最多有2i ( i0 ) 个结点。个结点。 若规定空树的深度为若规定空树的深度为-1,则,则深度为深度为k的的二叉树的最大二叉树的最大结点数是结点数是2k+1-1( k-1 )个。个。 具有具有 n n个结点的完全个结点的完全二叉树的深度二叉树的深度 k为为: :1) 1(logn2数据结构数据结构 对于对于一棵非空的一棵非空的二叉树,如果叶结点数为二叉树,如果叶结点数为 n0,度为,度为2 的结点数为的结点数为 n2 ,则有,则有 n
13、0 = n2 + 1。证明证明:设:设 n:二叉树结点总数,二叉树结点总数, n1:度为度为1 1 的结点数的结点数 则有则有 n = n0 + n1 + n2 (1) 设设B:二叉树中的分支数:二叉树中的分支数 则有则有 B = n - 1 (2) 又有又有 B = n1 + 2 n2 (3)综合综合(1)、(2)、(3)式可得到:式可得到:n0 = n2 + 1数据结构数据结构 对于具有对于具有 n 个个结点的完全二叉树,如果按照从上结点的完全二叉树,如果按照从上至下和从左到右的顺序对所有结点从至下和从左到右的顺序对所有结点从 0开始顺序编号,则开始顺序编号,则对于任意的序号为对于任意的序
14、号为 i 的结点,有:的结点,有: 若若2i+2n,则序号为,则序号为 i 的结点的右孩子结点的序号的结点的右孩子结点的序号为为2i+2 ;如果;如果2i+2n,则序号为,则序号为 i 的结点无右孩子。的结点无右孩子。 若若2i+10,则序号为,则序号为 i 的结点的双亲结点的序号为的结点的双亲结点的序号为 (i-1)/2;否则,;否则, 序号为序号为 i 的结点是根结点,无双亲结点。的结点是根结点,无双亲结点。数据结构数据结构7.3 二叉树的设计和实现二叉树的设计和实现 二叉树的存储结构二叉树的存储结构二叉树的顺序存储结构二叉树的顺序存储结构用一组连续的存储单元存放二叉树中的结点。用一组连续
15、的存储单元存放二叉树中的结点。 A B C D E F 0 1 2 3 4 5 A BCD EF012345 0 1 2 3 4 5 A B C F E G 6 9 12 D A BCD EFG012345678910 11 12数据结构数据结构二叉树的链式存储结构二叉树的链式存储结构 用链建立二叉树中结点之间的关系,通常采用二叉用链建立二叉树中结点之间的关系,通常采用二叉链表形式。在二叉链表结构中,将二叉树结点设置为链表形式。在二叉链表结构中,将二叉树结点设置为 data为保存结点本身信息的数据域,为保存结点本身信息的数据域, leftChild 和和rightChild 分别是指向结点的左
16、孩子和右孩子的指针域。分别是指向结点的左孩子和右孩子的指针域。leftChildrightChilddata数据结构数据结构 A B C D G F E A B C D EFGroot还有一些其它形式,如三叉链表、带头结点的链表形式等。还有一些其它形式,如三叉链表、带头结点的链表形式等。数据结构数据结构二叉树的仿真指针二叉树的仿真指针 用数组存储二叉树中结点,数组中每个结点除数据用数组存储二叉树中结点,数组中每个结点除数据元素域元素域data外,再设置仿真指针域存储二叉树中结点之外,再设置仿真指针域存储二叉树中结点之间的关系。间的关系。leftChild 域和域和 rightChild 域分别
17、是左孩子结域分别是左孩子结点和右孩子结点在数组中的下标序号,点和右孩子结点在数组中的下标序号,-1表示空指针。表示空指针。数据结构数据结构 A B C D G F E ABCDEFG134-1-1-1-12-156-1-1-10123456data leftChild rightChild数据结构数据结构 二叉树的操作实现二叉树的操作实现 ( 二叉链存储结构二叉链存储结构 ) typedef struct Node DataType data ; struct Node *leftChild ; struct Node *rightChild ; BiTreeNode ;二叉链表结点结构可定义
18、为:二叉链表结点结构可定义为:数据结构数据结构 void Initiate ( BiTreeNode * * root ) *root =( BiTreeNode * )malloc( sizeof( BiTreeNode ) ; ( *root ) leftChild = NULL ; ( *root ) rightChild = NULL ; root创建二叉树创建二叉树 root的头结点的头结点初始化初始化数据结构数据结构 将数据域信息为将数据域信息为 x 的结的结点插入到二叉树中结点点插入到二叉树中结点curr 的左孩子处。如果结点的左孩子处。如果结点curr 原来有左孩子结点,则将该
19、原来有左孩子结点,则将该左孩子结点作为结点左孩子结点作为结点 x 的左的左孩子结点。孩子结点。左结点插入左结点插入curr xs x currs数据结构数据结构 BiTreeNode *InsertLeftNode( BiTreeNode *curr , DataType x ) BiTreeNode *s , *t ; if ( curr = = NULL ) return NULL ; t = curr leftChild ; s = ( BiTreeNode * ) malloc ( sizeof ( BiTreeNode ) ) ; s data = x ; s leftChild =
20、 t ; s rightChild = NULL ; curr leftChild = s ; return curr leftChild ; 数据结构数据结构 将数据域信息为将数据域信息为 x 的结的结点插入到二叉树中结点点插入到二叉树中结点curr 的右孩子处。如果结点的右孩子处。如果结点curr 原来有右孩子结点,则将该原来有右孩子结点,则将该右孩子结点作为结点右孩子结点作为结点 x 的右的右孩子结点。孩子结点。右结点插入右结点插入curr xscurr x s数据结构数据结构 BiTreeNode *InsertRightNode( BiTreeNode *curr , DataTyp
21、e x ) BiTreeNode *s , *t ; if ( curr = = NULL ) return NULL ; t = curr rightChild ; s = ( BiTreeNode * ) malloc ( sizeof ( BiTreeNode ) ) ; s data = x ; s rightChild = t ; s leftChild = NULL ; curr rightChild = s ; return curr rightChild ; 数据结构数据结构 删除二叉树中结点删除二叉树中结点curr 的左子树。当的左子树。当curr 或或curr的的左孩子结点
22、为空时删除失败。左孩子结点为空时删除失败。左子树删除左子树删除 BiTreeNode *DeleteLeftTree( BiTreeNode *curr ) if ( curr = = NULL | curr leftChild = = NULL) return NULL ; Destroy ( & curr leftChild ) ; curr leftChild = NULL ; return curr ; 数据结构数据结构 删除二叉树中结点删除二叉树中结点curr 的右子树。当的右子树。当curr 或或curr的的右孩子结点为空时删除失败。右孩子结点为空时删除失败。右子树删除右子树删除
23、BiTreeNode *DeleteRightTree( BiTreeNode *curr ) if ( curr = = NULL | curr rightChild = = NULL) return NULL ; Destroy ( & curr rightChild ) ; curr rightChild = NULL ; return curr ; 数据结构数据结构7.4 二叉树遍历二叉树遍历 二叉树遍历二叉树遍历 二叉树的遍历是指按照某种顺序访问二叉树的遍历是指按照某种顺序访问二叉树中的二叉树中的每个结点,使每个结点被访问一次且只被访问一次。每个结点,使每个结点被访问一次且只被访问一
24、次。 遍历操作使非线性结构线性化。遍历操作使非线性结构线性化。 遍历二叉树包括遍历二叉树包括三个步骤三个步骤:遍历根的左子树:遍历根的左子树( L )、遍历根的右子树遍历根的右子树( R )、访问根结点、访问根结点( D )。 数据结构数据结构DLR( (前序前序) ) LDR( (中序中序) ) LRD( (后序后序) )DRL( (逆前序逆前序) ) RDL( (逆中序逆中序) ) RLD( (逆后序逆后序) )层序遍历方式层序遍历方式二叉树遍历的基本方法二叉树遍历的基本方法数据结构数据结构前序遍历前序遍历 ( DLR ) 前序遍历的前序遍历的递归定义递归定义为:为:若二叉树为空,遍历结束
25、。否则:若二叉树为空,遍历结束。否则:. 访问根结点;访问根结点;. 前序遍历根结点的左子树;前序遍历根结点的左子树;. 前序遍历根结点的右子树。前序遍历根结点的右子树。 A B C D G F E 前序遍历前序遍历A B D G C E F数据结构数据结构 中序遍历的中序遍历的递归定义递归定义为:为:若二叉树为空,遍历结束。否则:若二叉树为空,遍历结束。否则:. . 中序遍历根结点的左子树;中序遍历根结点的左子树;. . 访问根结点;访问根结点;. 中序遍历根结点的右子树。中序遍历根结点的右子树。 A B C D G F E 中序遍历中序遍历D G B A E C F中序遍历中序遍历 ( L
展开阅读全文