数据结构中的树图查找排序.pptx
《数据结构中的树图查找排序.pptx》由会员分享,可在线阅读,更多相关《数据结构中的树图查找排序.pptx(212页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、树树:是是 n(n0)n(n0)个结点的有限集合。如果个结点的有限集合。如果该集合为空,称为空树。在任意一棵非空该集合为空,称为空树。在任意一棵非空树中树中:ABCDEFKLGHIJM树的定义树的定义1)1)有且仅有一个特定的称为有且仅有一个特定的称为根结点根结点 (root)(root)的结点的结点;2)2)其他结点可分为若干个互其他结点可分为若干个互不相交的子集不相交的子集,而且每一个而且每一个子集本身又是一棵树子集本身又是一棵树,称为称为根的子树。根的子树。递归定义递归定义第1页/共212页结点结点:结点的度结点的度:树的度树的度:叶子结点叶子结点:分支结点分支结点:数据元素数据元素+若
2、干指向子树若干指向子树的分支的分支结点分支的个数结点分支的个数,即子树的数目即子树的数目如:如:A A的度的度-3-3;B B的度的度-2-2;K K的度的度-0-0;树中所有结点的度的最大值树中所有结点的度的最大值 如:树的度为如:树的度为3 3;度为零的结点,也称终端结点度为零的结点,也称终端结点如例:如例:K K,L L,F F,G G,M M,I I,J J为终端结点为终端结点度大于零的结点度大于零的结点如例:如例:A,B,C,D,EA,B,C,D,E基本术语基本术语612345第2页/共212页森林:森林:是是 m m(m0m0)棵互不相交的树的集合)棵互不相交的树的集合ArootB
3、EFKLCGDHIJMF第3页/共212页线性结构线性结构树型结构树型结构第一个数据元素第一个数据元素 (无前驱无前驱)根结点根结点 (无前驱无前驱)最后一个数据元素最后一个数据元素(无后继无后继)多个叶子结点多个叶子结点 (无后继无后继)其它数据元素其它数据元素(一个前驱、一个前驱、一个后继一个后继)其它数据元素其它数据元素(一个前驱、一个前驱、多个后继多个后继)第4页/共212页7.2 7.2 二叉树二叉树第5页/共212页二叉树二叉树或为空树;或是由一个根结或为空树;或是由一个根结点加上两棵分别称为点加上两棵分别称为左左和和右子树右子树的、的、互不交的互不交的二叉树组成。二叉树组成。AB
4、CDEFGHK根结点左子树右子树EF特点:特点:1 1)每个结点)每个结点最多只有两棵最多只有两棵子树;子树;2 2)两颗子树)两颗子树有左右之分,有左右之分,顺序不能换。顺序不能换。第6页/共212页二叉树的五种基本形态:二叉树的五种基本形态:N空树空树只含根结点只含根结点NNNLRR右子树为空树右子树为空树L左子树为空树左子树为空树左右子左右子树均不树均不为空树为空树第7页/共212页特殊特殊的二叉树:的二叉树:满二叉树满二叉树满二叉树:满二叉树:指的是深度为指的是深度为k且含有且含有2k-1个结点的二叉树。个结点的二叉树。123456789 10 11 12 13 14 15123456
5、7深度为深度为3,节点数,节点数=23-1=7深度为深度为4,节点数,节点数=24-1=15特点:特点:1)每一层上的结点数都是最大结点数;)每一层上的结点数都是最大结点数;2)叶子结点都在最后一层。)叶子结点都在最后一层。第8页/共212页完全二叉树:完全二叉树:树中所含的树中所含的n 个结点和满个结点和满二叉树中编号为二叉树中编号为1 至至n 的结点一一对应。的结点一一对应。12345612345612345特点:特点:1)除了最下一层外其余各层都是满的;)除了最下一层外其余各层都是满的;2)最下一层的结点都集中在该层的左侧。)最下一层的结点都集中在该层的左侧。12345678 9 10特
6、殊特殊的二叉树:的二叉树:完全二叉树完全二叉树第9页/共212页性质性质1:满二叉树的第满二叉树的第i层上有层上有2i-1 个结点个结点(i1)用归纳法证明用归纳法证明:归纳基归纳基:归纳假设:归纳假设:归纳证明:归纳证明:i=1时,只有一个根结点,时,只有一个根结点,2i-1=20=1;假设第假设第j j层有层有2 2j-1j-1结点,命题成立结点,命题成立;第第j层的每个结点都有层的每个结点都有2个结点,则第个结点,则第(j+1)层上的结点数层上的结点数=2*2j-1=2j=2(j+1)-1。二叉树的性质二叉树的性质1234 5 6 7第10页/共212页性质性质1的推论:的推论:在二叉树
7、的第在二叉树的第i层上至多有层上至多有2i-1 个结点个结点(i1)。第11页/共212页性质性质2:深度为深度为k 的满二叉树共有的满二叉树共有2k-1 个结个结点(点(k1)。证明:证明:基于上一条性质,深度为基于上一条性质,深度为k 的满二叉树上的满二叉树上的结点数为:的结点数为:20+21+2k-1=2k-1性质性质2的推论的推论:深度为深度为k 的二叉树上最多的二叉树上最多有有2k-1 个结点(个结点(k1)第12页/共212页性质性质3:设二叉树叶子结点数为设二叉树叶子结点数为n0,度为度为 2的结点数为的结点数为n2,则必存在关系式:,则必存在关系式:n0=n2+1。性质性质4
8、4:具有具有 n n 个结点的完全二叉树的个结点的完全二叉树的深深度度为为 loglog2 2n n +1+1第13页/共212页性质性质 5 5:对于具有对于具有n n个结点的完全二叉树,如个结点的完全二叉树,如果按照从上到下和从左至右的顺序对二叉树果按照从上到下和从左至右的顺序对二叉树中的所有结点从中的所有结点从 1 1 至至 n n进行编号,则对于任进行编号,则对于任意的序号为意的序号为 i i 的结点,有的结点,有:(1)(1)若若 i1i1,则序号为,则序号为i i的结点的双亲结点的序号的结点的双亲结点的序号为为i/2i/2;如果;如果i=1i=1,则该结点是根,无双亲,则该结点是根
9、,无双亲;(2)(2)若若 2i=n2in2in 则该结点无左孩子;则该结点无左孩子;(3)(3)若若 2i+1=n2i+1n2i+1n,则序号为,则序号为i i的结点无右的结点无右孩子结点。孩子结点。第14页/共212页二叉树的存储结构二叉树的存储结构二、二叉树的链式存储表示二、二叉树的链式存储表示一、一、二叉树的顺序存储表示二叉树的顺序存储表示第15页/共212页 用一组连续的存储单元存储二叉树的数用一组连续的存储单元存储二叉树的数据元素据元素,以结点存储的相对位置表示结点之以结点存储的相对位置表示结点之间的关系。间的关系。为了正确地反映结点之间的关系为了正确地反映结点之间的关系,任何任何
10、二叉树都必须按照二叉树都必须按照完全二叉树完全二叉树的形式来存储的形式来存储.这种存储方式对某些二叉树的存储会造成这种存储方式对某些二叉树的存储会造成存储空间的浪费。存储空间的浪费。顺序存储结构顺序存储结构第16页/共212页 在高级语言中在高级语言中,可以用一维数组来描述可以用一维数组来描述这种顺序存储结构。这种顺序存储结构。例如:例如:ABCDFABCDE完全二叉树的顺序存储存储位置123456数据元素ABCDEF一般二叉树的存储存储位置123456数据元素ABCDNOTES:代表空元素第17页/共212页#defineMAX_TREE_SIZE100/二叉树的最大结点数二叉树的最大结点数
11、TElemTypeSqBiTreeMAX_TREE_SIZE;/1号单元存储根结点号单元存储根结点例如例如:ABDCEF1234567891011121314ABCDEF第18页/共212页练习:练习:1已知一棵完全二叉树有已知一棵完全二叉树有64个叶子结点,则该树可能达个叶子结点,则该树可能达到的最大深度为()到的最大深度为()A7B8C9D102若一棵二叉树有若一棵二叉树有11个叶子结点,则该二叉树中度为个叶子结点,则该二叉树中度为2的结点个数是()的结点个数是()A10B11C12D不确定的不确定的3.已知一棵二叉树的顺序存储序列为:已知一棵二叉树的顺序存储序列为:aebfcd,则:,则
12、:1)e的左孩子是哪个结点?右孩子是哪个结点?的左孩子是哪个结点?右孩子是哪个结点?2)d的双亲是哪个结点?的双亲是哪个结点?答案:B答案:A答案:1)没有左孩子;右孩子是f;2)b;第19页/共212页练习:练习:3 3假设一棵二叉树的顺序存储结构如图所示,假设一棵二叉树的顺序存储结构如图所示,请回答下列问题:请回答下列问题:(1 1)哪个结点是根结点?)哪个结点是根结点?(2 2)哪些结点是叶子结点?)哪些结点是叶子结点?(3 3)哪些结点是)哪些结点是H H的祖先?的祖先?(4 4)哪些结点是)哪些结点是B B的兄弟?的兄弟?(5 5)树的深度是多少?)树的深度是多少?ABCDE H12
13、34567891011121314A AD,HD,HA,C,EA,C,EC C4 4第20页/共212页二、二叉树的链式存储表示二、二叉树的链式存储表示1.1.二叉链表二叉链表2三叉链表三叉链表第21页/共212页二叉链结构二叉链结构 每个结点包含三个域每个结点包含三个域:数据域和左右指数据域和左右指针域针域,如下表所示如下表所示lchilddatarchildADEBCF root二叉链表二叉链表第22页/共212页structBTNodedatatypedata;structBTNode*lchild,*rchild;TypedefBTNode*BTree;将二叉树类型将二叉树类型BTre
14、eBTree定义为指向二叉链表结点结构定义为指向二叉链表结点结构的指针类型。的指针类型。lchilddatarchild结点结构结点结构:C语言的类型描述如下语言的类型描述如下:第23页/共212页三叉链表三叉链表 三叉链表结构:每个结点除包含数据域和左右指三叉链表结构:每个结点除包含数据域和左右指针域外针域外,还包含一个指向其双亲结点的指针域。还包含一个指向其双亲结点的指针域。rootADEBCF parentlchilddatarchild第24页/共212页structTriTNode/结点结构结点结构datatypedata;structTriTNode*lchild,*rchild;
15、/左右孩子指针左右孩子指针structTriTNode*parent;/双亲指针双亲指针typedefTriTNode*TriTree;parentlchilddatarchild结点结构结点结构:C 语言的类型描述如下语言的类型描述如下:第25页/共212页v 在这两种结构中在这两种结构中,只需要给出指向根结点只需要给出指向根结点的指针的指针,即可访问树中任意一个结点即可访问树中任意一个结点.v 尽管在二叉表中无法由结点直接找到其尽管在二叉表中无法由结点直接找到其双亲,但由于二叉链表的结构灵活,操作双亲,但由于二叉链表的结构灵活,操作方便,对于一般情况下的二叉树,甚至比方便,对于一般情况下的
16、二叉树,甚至比顺序存储结构还节省空间。因此二叉链表顺序存储结构还节省空间。因此二叉链表是最常用的二叉树存储方式。是最常用的二叉树存储方式。今后,我们所涉及到的二叉树,如不今后,我们所涉及到的二叉树,如不加特别说明均采用二叉链表存储。加特别说明均采用二叉链表存储。说明说明第26页/共212页二叉树的遍历二叉树的遍历第27页/共212页 遍历二叉树遍历二叉树是指按照是指按照一定的规律一定的规律对对二叉树中的二叉树中的每个结点每个结点,访问且仅访问,访问且仅访问一一次次的处理过程。的处理过程。“访问访问”的含义可以很广,如:求结点的的含义可以很广,如:求结点的度、层次、输出结点的信息等等。度、层次、
17、输出结点的信息等等。第28页/共212页“遍历遍历”是任何类型均有的操作,是任何类型均有的操作,1 1)对线性结构而言,只有一条搜索路径)对线性结构而言,只有一条搜索路径(因为每个结点均只有一个后继因为每个结点均只有一个后继),故不需要,故不需要另加讨论。另加讨论。2 2)而二叉树是非线性结构,每个结点有)而二叉树是非线性结构,每个结点有两个后继,则存在如何遍历即按什么样的两个后继,则存在如何遍历即按什么样的搜搜索路径索路径进行进行遍历的问题。遍历的问题。第29页/共212页对对“二二叉叉树树”而而言言,可可以以把把二二叉叉树树看看成成由由三三个个基基本本单单元元组组成成:根根结结点点(D)(
18、D)、左左子子树树(L)(L)、右右子子树树(R),(R),并并且且规规定定左左子子树树上上的的所所有有结结点点应应该该在在右右子子树树上上的的所所有有结结点点之之前前被被访访问问,由由此此可可以以得得到到三三种种遍遍历历顺顺序序:先先序序遍遍历历(DLR)(DLR)、中序遍历、中序遍历(LDR)(LDR)、后序遍历、后序遍历(LRD)(LRD)先先序的遍历算法中中序的遍历算法后后序的遍历算法遍历算法遍历算法第30页/共212页若二叉树为空树,则空操作;否则,若二叉树为空树,则空操作;否则,(1)访问根结点;)访问根结点;(2)先序遍历左子树;)先序遍历左子树;(3)先序遍历右子树。)先序遍历
19、右子树。先序的遍历算法:先序的遍历算法:ABCDEGF先序遍历:ABDEGCF第31页/共212页若二叉树为空树,则空操作;否则,若二叉树为空树,则空操作;否则,(1)中序遍历左子树;)中序遍历左子树;(2)访问根结点;)访问根结点;(3)中序遍历右子树。)中序遍历右子树。中序的遍历算法:中序的遍历算法:ABCDEGF中序遍历:DBGEACF第32页/共212页若二叉树为空树,则空操作;否则,若二叉树为空树,则空操作;否则,(1)后序遍历左子树;)后序遍历左子树;(2)后序遍历右子树;)后序遍历右子树;(3)访问根结点。)访问根结点。后序的遍历算法:后序的遍历算法:ABCDEGF后序遍历:DG
20、EBFCA第33页/共212页ABCEDGFH先序遍历:中序遍历:后序遍历:ABDGCEHFBGDAHECFGDBHEFCA例题例题第34页/共212页中序遍历:先序遍历:后序遍历:a+b*cde/f-+a*bcd/efabcd-*+ef/-例题例题+/e*bfacd()第35页/共212页根据遍历序列画二叉树根据遍历序列画二叉树由一棵二叉树的由一棵二叉树的先序序列和中序序列先序序列和中序序列或或中序和后序中序和后序能够唯一确定一棵二叉树。能够唯一确定一棵二叉树。先序序列:先序序列:ABCDEFGHI中序序列:中序序列:BCAEDGHFIABDECFIGH第36页/共212页练习练习已知一棵二
21、叉树的已知一棵二叉树的先序序列和中序序列先序序列和中序序列,请,请画出该二叉树。画出该二叉树。先序序列:先序序列:ABCDEFGHIJ中序序列:中序序列:CBEDFAHGJIABGHDIJCEF第37页/共212页树和森林树和森林 第38页/共212页树的存储结构树的存储结构一、双亲表示法一、双亲表示法二、孩子链表表示法二、孩子链表表示法三、树的二叉链表三、树的二叉链表(孩子孩子-兄弟)兄弟)存储表示法存储表示法第39页/共212页树的双亲表示法树的双亲表示法 以一组连续空间以一组连续空间(数组数组)存储树的结点存储树的结点,同时同时在每个结点中附设一个指示器指示其双亲结点在每个结点中附设一个
22、指示器指示其双亲结点在数组中的位置在数组中的位置.typedefstructdatatypedata;intparent;Node;typedefNodeTreeMAX_NODE_NUM#defineMAX_NODE_NUM100C C语言的类型描述语言的类型描述:ABCDEFG0A-11B02C03D04E25F26G5dataparent第40页/共212页孩子表示法孩子表示法 存储每个结点及其孩子信息。每个结点的所有存储每个结点及其孩子信息。每个结点的所有孩子结点形成该结点的孩子链表。孩子结点形成该结点的孩子链表。ABCDEFG0A1B2C3D4E5F6G65123孩子链表孩子链表0A1
23、B2C3D4E5F6G-1000224645123带双亲的孩子链带双亲的孩子链表表4第41页/共212页孩子孩子-兄弟表示法兄弟表示法structTreeNodedatatypedata;structTreeNode*children;structTreeNode*next;typedefstructTree;C C语言的类型描述语言的类型描述:结点结构结点结构:每个结点除其信息域外,再增加两个分别指向每个结点除其信息域外,再增加两个分别指向该结点的该结点的第一个孩子结点第一个孩子结点和和下一个兄弟结点下一个兄弟结点的指针。的指针。childrendatanext第42页/共212页孩子孩子-
24、兄弟表示法兄弟表示法第43页/共212页树、森林与二叉树树、森林与二叉树之间的转换之间的转换 第44页/共212页将树转换成二叉树的方法将树转换成二叉树的方法l加线:在兄弟之间加一连线加线:在兄弟之间加一连线l抹线:对每个结点,除了其左孩子外,去除其与其余孩子之间的关系抹线:对每个结点,除了其左孩子外,去除其与其余孩子之间的关系l旋转:以树的根结点为轴心,将整树顺时针转旋转:以树的根结点为轴心,将整树顺时针转45ABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHI树转换成的二叉树其右子树一定为空第45页/共212页将二叉树转换成树将二叉树转换成树l加线:若
25、加线:若p p结点是双亲结点的左孩子,则将结点是双亲结点的左孩子,则将p p的右孩子,右孩子的右孩子,的右孩子,右孩子的右孩子,沿分支找到的所有右孩子,都与沿分支找到的所有右孩子,都与p p的双亲用线连起来的双亲用线连起来l抹线:抹掉原二叉树中双亲与右孩子之间的连线抹线:抹掉原二叉树中双亲与右孩子之间的连线l调整:将结点按层次排列,形成树结构调整:将结点按层次排列,形成树结构ABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHI第46页/共212页ABCDEFGHIABCDEFGHI树的树的先序遍历先序遍历和和后序遍历后序遍历可以借用二叉可以借用二叉树的树的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 中的 查找 排序
限制150内