数据结构--树和二叉树ppt课件.ppt
《数据结构--树和二叉树ppt课件.ppt》由会员分享,可在线阅读,更多相关《数据结构--树和二叉树ppt课件.ppt(107页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章 树和二叉树 第六章 树和二叉树 6.1 6.1 树的有关概念树的有关概念1.1. 树的概念树的概念2. 2. 树的应用树的应用3.3. 树的表示树的表示4. 树的有关术语树的有关术语5 树的基本操作树的基本操作6.1 树的有关概念1树的定义树的定义 定义:树是定义:树是n个结点的个结点的集合。在任一棵非空树中:集合。在任一棵非空树中: (1)有且仅有一个称为根的结点;。)有且仅有一个称为根的结点;。 (2)其余结点可分为)其余结点可分为m个个有限集合,而且这些集合有限集合,而且这些集合中的每一集合本身又是一棵树,称为根的子树。中的每一集合本身又是一棵树,称为根的子树。树是递归结构,在树
2、的定义中又用到了树的概念树是递归结构,在树的定义中又用到了树的概念J JI IA AC CB BD DH HG GF FE E 树结构树结构 (除了一个称为根的结点外)每个元素都有且仅有(除了一个称为根的结点外)每个元素都有且仅有一个直接前趋,有且仅有零个或多个直接后继。一个直接前趋,有且仅有零个或多个直接后继。6.1 树的有关概念从逻辑结构看:从逻辑结构看: 1)树中只有根结点没有前趋;)树中只有根结点没有前趋;2)除根外,其余结点都有且仅一个前趋;)除根外,其余结点都有且仅一个前趋;3)树的结点,可以有零个或多个后继;)树的结点,可以有零个或多个后继;4)除根外的其他结点,都存在)除根外的
3、其他结点,都存在条从根到该结点的路径;条从根到该结点的路径;5)树是一种分枝结构)树是一种分枝结构J JI IA AC CB BD DH HG GF FE E6.1 树的有关概念2树的应用树的应用1)树可表示具有分枝结构关系的对象)树可表示具有分枝结构关系的对象例例1家族族谱家族族谱例例2单位行政机构的组织关系、系统功能模块图单位行政机构的组织关系、系统功能模块图6.1 树的有关概念2)树是常用的数据组织形式)树是常用的数据组织形式 有些应用中数据元素之间并不存在间分支结构关系,但是有些应用中数据元素之间并不存在间分支结构关系,但是为了便于管理和使用数据,将它们用树的形式来组织。为了便于管理和
4、使用数据,将它们用树的形式来组织。例例3 计算机的文件系统计算机的文件系统 不论是不论是DOS文件系统还是文件系统还是window文件系统,所有的文件是文件系统,所有的文件是用树的形式来组织的。用树的形式来组织的。My ComputerC:D:E:etcWINDOWSProgram FilesPictureMusic 6.1 树的有关概念3 、树的基本术语、树的基本术语1 1)结点的度:)结点的度:结点所拥有的子树的个数。结点所拥有的子树的个数。2 2)树的度:)树的度:树中各结点度的最大值。树中各结点度的最大值。CGBDEFKLHMIJA 6.1 树的有关概念3 3)叶子结点:)叶子结点:度
5、为度为0的结点,也称为终端结点。的结点,也称为终端结点。4 4)分支结点:)分支结点:度不为度不为0的结点,也称为非终端结点。的结点,也称为非终端结点。CGBDEFKLHMIJA 6.1 树的有关概念5 5)孩子、双亲:)孩子、双亲:树中结点的子树的根结点称为这个结树中结点的子树的根结点称为这个结点的点的孩子结点孩子结点,这个结点称为它孩子结点的,这个结点称为它孩子结点的双亲结点双亲结点;6 6)兄弟:)兄弟:具有同一个双亲的孩子结点互称为兄弟。具有同一个双亲的孩子结点互称为兄弟。 CGBDEFKLHMIJA 6.1 树的有关概念7)路径:)路径:如果树的结点序列如果树的结点序列n1, n2,
6、 , nk有如下关系:结有如下关系:结点点ni是是ni+1的双亲,则把的双亲,则把n1, n2, , nk称为一条由称为一条由n1至至nk的的路径;路径上经过的边的个数称为路径;路径上经过的边的个数称为路径长度路径长度。 CGBDEFKLHMIJA 6.1 树的有关概念8 8)祖先、子孙:)祖先、子孙:在树中,如果有一条路径从结点在树中,如果有一条路径从结点x到结点到结点y,那么,那么x就称为就称为y的祖先,而的祖先,而y称为称为x的子孙。的子孙。CGBDEFKLHMIJA 6.1 树的有关概念9 9)结点所在层数:)结点所在层数:根结点的层数为根结点的层数为1 1;对其余任何结点,;对其余任
7、何结点,若某结点在第若某结点在第k k层,则其孩子结点在第层,则其孩子结点在第k+1k+1层。层。1010)树的深度:)树的深度:树中所有结点的最大层数,也称树中所有结点的最大层数,也称高度高度。1 1层层2层层4 4层层3层层高度高度4CGBDEFKLHMIJC 6.1 树的有关概念1111)有序树、无序树:)有序树、无序树:如果一棵树中结点的各子树如果一棵树中结点的各子树从左到右是有次序的(即不能互换),称这棵树为从左到右是有次序的(即不能互换),称这棵树为有序树;反之,称为无序树。有序树;反之,称为无序树。ACBGFEDACBGFED数据结构中讨论的一般都是有序树数据结构中讨论的一般都是
8、有序树 6.1 树的有关概念12)森林:)森林:m (m0)棵互不相交的树的集合。棵互不相交的树的集合。 CBDEFKLHJA 6.1 树的有关概念树结构和线性结构的比较树结构和线性结构的比较线性结构线性结构树结构树结构第第一一个数据元素个数据元素根结点(只有根结点(只有一一个)个)无前驱无前驱无双亲无双亲最后最后一一个数据元素个数据元素叶子结点叶子结点(可以有可以有多多个个)无后继无后继无孩子无孩子其它数据元素其它数据元素其它结点其它结点一个前驱一个前驱,一个后继一个后继一个双亲一个双亲,多个孩子多个孩子一对一一对一 一对多一对多6.1 树的有关概念4、树的基本操作、树的基本操作 树的应用很
9、广,应用不同基本操作也不同。下面列举了树树的应用很广,应用不同基本操作也不同。下面列举了树的一些基本操作:的一些基本操作: 1)InitTree(&T); /构造空树T 2)DestroyTree(&T); /销毁树T 3)CreateTree(&T, definition); /按definition构造树T 4)ClearTree(&T); /将树T清为空树 5)TreeEmpty(T); /判断树T是否为空树 6)TreeDepth(T); /求树的深度 7) Root(T); /返回树T的根值 6.1 树的有关概念 8) Value(T, &cur_e); /求树T中结点cur_e的值
10、 9) Assign(T, cur_e, value); /把value赋值给树T的cur_e结点 10)Parent(T, cur_e); /求树T中非根结点cur_e的双亲 11)LeftChild(T, cur_e); /求树T中非叶子结点cur_e的左孩子 12)RightSibling(T, cur_e); /求树T中cur_e结点的右兄弟 13)InsertChild(&T, &p, i, c); /在树中插入一个结点 14)DeleteChild(&T,&p, i); /删除树中某一个结点 15)TraverseTree(T, Visit( ); /按某种次序访问树中每个结点6
11、2 二 叉 树 树是一种分枝结构的对象,在树的概念中,对每一个结点树是一种分枝结构的对象,在树的概念中,对每一个结点孩子的个数没有限制,因此树的形态多种多样,本章我们主要孩子的个数没有限制,因此树的形态多种多样,本章我们主要讨论一种最简单的树讨论一种最简单的树二叉树。二叉树。6.2 二 叉 树一一 二叉树的概念二叉树的概念1 1 二叉树的定义二叉树的定义二叉树:二叉树: 或为空树,或由根及两或为空树,或由根及两颗不相交的左子树、右子树构成,颗不相交的左子树、右子树构成,并且左、右子树本身也是二叉树。并且左、右子树本身也是二叉树。说明:说明:1 1)二叉树中每个结点最多有两颗子树;二叉树每个结点
12、度小于等于)二叉树中每个结点最多有两颗子树;二叉树每个结点度小于等于2;2;2 2)左、右子树不能颠例)左、右子树不能颠例有序树有序树; ;3 3)二叉树是递归结构,在二叉树的定义中又用到了二叉树的概念)二叉树是递归结构,在二叉树的定义中又用到了二叉树的概念; ;ABCDEFG6.2 二 叉 树 2 二叉树的基本形态二叉树的基本形态空二叉树空二叉树只有一个根结点只有一个根结点右子树右子树根结点只有右子树根结点只有右子树左子树左子树根结点只有左子树根结点只有左子树左子树左子树右子树右子树根结点同时有左右子树根结点同时有左右子树6.2 二 叉 树二、二叉树性质 性质1 在二叉树的第i 层上最多有2
13、i-1个结点(i=1)证明:证明: 当当i=1时时,第,第1层只有一个根结点,结点数层只有一个根结点,结点数=20 =1,结论显然成立。,结论显然成立。假设假设j=i-1时时,结论正确,即第,结论正确,即第j层最多有层最多有2i-2, 所以当所以当j=i时时,第,第i层最多有层最多有2*2i-2=2i-1;结论正确;结论正确6.2 二 叉 树 性质性质2 一棵深度为一棵深度为k的二叉树中,最多有的二叉树中,最多有2k- -1个结个结点,最少有点,最少有k个结点。个结点。 证明:由性质证明:由性质1可知,深度为可知,深度为k的二叉树中结点个数最多的二叉树中结点个数最多= =2k-1;kii1)(
14、层上结点的最大个数第 每一层至少要有一个结点,因此深度为每一层至少要有一个结点,因此深度为k k的二叉树,的二叉树,至少有至少有k k个结点。个结点。6.2 二 叉 树证明证明: 设设n为二叉树的结点总数,为二叉树的结点总数,n1为二为二叉树中度为叉树中度为1的结点数,则有:的结点数,则有: nn0n1n2 在二叉树中,在二叉树中,除了根结点外,其余结点都有唯一除了根结点外,其余结点都有唯一的一的一个分枝进入,由于这些分枝是由度为个分枝进入,由于这些分枝是由度为1和度为和度为2的结点射出的结点射出的,一个度为的,一个度为1的结点射出一个分枝,一个度为的结点射出一个分枝,一个度为2的结点射的结点
15、射出两个分枝,所以有:出两个分枝,所以有: nn12n21因此可以得到:因此可以得到:n0n21 。A152346789 10BCDEFGHIJ性质性质3 在一棵二叉树中,如果叶子结点数为在一棵二叉树中,如果叶子结点数为n0,度为,度为2的结点数为的结点数为n2,则有,则有: n0n21。 6.2 二 叉 树两种特殊的二叉树两种特殊的二叉树满二叉树:如果深度为满二叉树:如果深度为k k的二叉树,有的二叉树,有2 2k k-1-1个结点则称为满二叉树;个结点则称为满二叉树;A15234678910BCDEFGHIJKLM NO1112 13 14 15满二叉树的特点满二叉树的特点:1. 叶子只能
16、出现在最下一层;叶子只能出现在最下一层;2. 只有度为只有度为0和度为和度为2的结点。的结点。满二叉树在同样深度的二叉树中满二叉树在同样深度的二叉树中结点结点个数最多个数最多满二叉树在同样深度的二叉树中满二叉树在同样深度的二叉树中叶子结点叶子结点个数最多个数最多6.2 二 叉 树 完全二叉树完全二叉树 深度为深度为K,有,有n个结点的个结点的二叉树,当且仅当其每一个二叉树,当且仅当其每一个结点都与深度为结点都与深度为K的满二叉树的满二叉树中编号从中编号从1至至n的结点都一一的结点都一一对应时,称之为完全二叉树对应时,称之为完全二叉树。A15234678910BCDEFGHIJA15234678
17、910BCDEFGHIJKLM NO1112 13 14 156.2 二 叉 树在满二叉树中,从最后在满二叉树中,从最后一个结点开始,一个结点开始,连续连续去去掉掉任意任意个结点,即是一个结点,即是一棵完全二叉树。棵完全二叉树。A1523467910BCDEFGHIJK11L12M13N14O158A15234678910BCDEFGHIJ不是完全二叉树,结点不是完全二叉树,结点10与满二叉树中的结点与满二叉树中的结点10不是同一个结点不是同一个结点6.2 二 叉 树完全二叉树的特点完全二叉树的特点1. 叶子结点只能出现在最下两层;叶子结点只能出现在最下两层;2. 完全二叉树中如果有度为完全二
18、叉树中如果有度为1的结的结点,只可能有一个,且该结点,只可能有一个,且该结点只有点只有左孩子。左孩子。 3. 深度为深度为k的完全二叉树在的完全二叉树在k-1层层上一定是满二叉树。上一定是满二叉树。A1523467910BCDEFGHIJK11L12M13N14O1586.2 二 叉 树性质性质4 具有具有n个结点的完全二叉树的深度为个结点的完全二叉树的深度为 log2n +1。 A15234678910BCDEFGHIJ6.2 二 叉 树性质性质5 对一棵具有对一棵具有n个结点的完全二叉树中从个结点的完全二叉树中从1开始按层序编号,开始按层序编号,则对于任意的序号为则对于任意的序号为i(1i
19、n)的结点,有:)的结点,有: (1)如果)如果i1,则结点,则结点i的双亲结点的序号为的双亲结点的序号为 i/2(取整);如(取整);如果果i1,则结点,则结点i是根结点,无双亲结点。是根结点,无双亲结点。 A15234678910BCDEFGHIJ6.2 二 叉 树(2)如果)如果2in,则结点,则结点i的左孩子的序号为的左孩子的序号为2i; 如果如果2in,则结点,则结点i无左孩子。无左孩子。 A15234678910BCDEFGHIJ6.2 二 叉 树(3)如果)如果2i1n,则结点,则结点i的右孩子的序号为的右孩子的序号为2i1; 如果如果2i1n,则结点,则结点 i无右孩子。无右孩
20、子。 A15234678910BCDEFGHIJ6.2 二 叉 树 对一棵具有对一棵具有n个结点的个结点的完全二叉树中从完全二叉树中从1开始按层开始按层序编号,则序编号,则l 结点结点i的双亲结点为的双亲结点为 i/2;l 结点结点i的左孩子为的左孩子为2i;l 结点结点i的右孩子为的右孩子为2i1。 18910456723性质性质5表明,在完全二叉树中,结点的层序编号反映表明,在完全二叉树中,结点的层序编号反映了结点之间的逻辑关系。了结点之间的逻辑关系。6.2 二 叉 树三二叉树存贮结构三二叉树存贮结构 1 1 二叉树的顺序结构二叉树的顺序结构 二叉树的顺序存储结构就是用一维数组存储二叉树中
21、二叉树的顺序存储结构就是用一维数组存储二叉树中的结点,并且结点的的结点,并且结点的存储位存储位置置(下标)应能体现结点之(下标)应能体现结点之间的间的逻辑关系逻辑关系父子关系。父子关系。 如何利用数组下标来反映结点之间的逻辑关系如何利用数组下标来反映结点之间的逻辑关系? ?完全二叉树完全二叉树和和满二叉树满二叉树中结点的序号可以唯一中结点的序号可以唯一地反映出结点之间的逻辑关系地反映出结点之间的逻辑关系 。6.2 二 叉 树完全二叉树的顺序存储完全二叉树的顺序存储A15234678910BCDEFGHIJ以编号以编号为下标为下标 A B C D E F G H I J数组下标数组下标 1 2
22、3 4 5 6 7 8 9 106.2 二 叉 树二叉树的顺序存储二叉树的顺序存储ABCDFGE按照完全按照完全二叉树编号二叉树编号ABCDFGE123561013ABC DE F G数组下标数组下标 1 2 3 4 5 6 7 8 9 10 11 12 13以编号以编号为下标为下标6.2 二 叉 树6.2 二 叉 树 2 2 二叉树的链式存储结构二叉树的链式存储结构1)基本思想:)基本思想:令二叉树的每个结点对应一个链表结令二叉树的每个结点对应一个链表结点,链表结点除了存放与二叉树结点有关的数据信点,链表结点除了存放与二叉树结点有关的数据信息息外,还要设置指示左右孩子的指针。外,还要设置指示
23、左右孩子的指针。 结点结构:结点结构: lchild data rchild其中,其中,data:数据域,存放该结点的数据信息;:数据域,存放该结点的数据信息; lchild:左指针域,存放指向左孩子的指针;:左指针域,存放指向左孩子的指针; rchild:右指针域,存放指向右孩子的指针。:右指针域,存放指向右孩子的指针。 6.2 二 叉 树二叉树的二叉链表存储表示:二叉树的二叉链表存储表示:Typedef struct BiNode TElemType data; struct BiNode *lchild, *rchild;/ 左右孩子指针左右孩子指针BiNode, *BiTree;6.2
24、 二 叉 树 2 2)二叉链表)二叉链表 二叉链表中每个结点至少包含三个域:数据域、左指针域、二叉链表中每个结点至少包含三个域:数据域、左指针域、 右指针域右指针域 ABCDEFGGFEDBAC在在n n个结点的二叉树中,有个结点的二叉树中,有n+1n+1个空链域。个空链域。6.2 二 叉 树3 )三叉链表三叉链表 三叉链表中每个结点至少包含四个域:数据域、双亲指针三叉链表中每个结点至少包含四个域:数据域、双亲指针域、左指针域、右指针域域、左指针域、右指针域结点结构:结点结构: lchild data parent其中,其中,data:数据域,存放该结点的数据信息;:数据域,存放该结点的数据信
25、息; parent:双亲指针域,存放指向指向双亲节点的指针;双亲指针域,存放指向指向双亲节点的指针; lchild:左指针域,存放指向左孩子的指针;:左指针域,存放指向左孩子的指针; rchild:右指针域,存放指向右孩子的指针。:右指针域,存放指向右孩子的指针。 rchild6.2 二 叉 树ABCDEFGABDEFCG第六章第六章 树和二叉树树和二叉树 6.3 二叉树的遍历一、二叉树的遍历方法一、二叉树的遍历方法 二叉树的遍历是指从根结点出发,按照某种二叉树的遍历是指从根结点出发,按照某种次序次序访问二叉树中的所有结点,使得每个结点被访问一次访问二叉树中的所有结点,使得每个结点被访问一次且
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 二叉 ppt 课件
限制150内