数据结构第6章树和二叉树.pptx
《数据结构第6章树和二叉树.pptx》由会员分享,可在线阅读,更多相关《数据结构第6章树和二叉树.pptx(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、6.1 树的基本概念树的基本概念v 什么是树?什么是树?树是由树是由 n(n 0)个结点的有限集合。如果个结点的有限集合。如果 n=0,称为空树;如,称为空树;如果果 n 0,则,则 有且仅有一个特定的称之为根有且仅有一个特定的称之为根(Root)的结点,它只有直接后继,但没有直的结点,它只有直接后继,但没有直接前驱;接前驱;当当n 1,除根以外的其它结点划分为,除根以外的其它结点划分为 m(m 0)个互不相交的有限集个互不相交的有限集 T1,T2,Tm,其中每个集合本身又是一棵树,并且称为根的子树,其中每个集合本身又是一棵树,并且称为根的子树(SubTree)。注注1:过去许多书籍中都定义树
2、为:过去许多书籍中都定义树为n1,曾经有,曾经有“空树不是树空树不是树”的说法,但现在的说法,但现在树的定义已修改。树的定义已修改。注注2:树的定义具有递归性,即树中还有树。:树的定义具有递归性,即树中还有树。第1页/共73页T=A,B,C,D,E,F,G,H,I,J,K,L A是根,其余结点可以划分为是根,其余结点可以划分为3个互不相交的集合:个互不相交的集合:T1=B,E,F,K,L T2=C,G T3=D,H,I,J,M 这些集合中的每一集合都本身又是一棵树,它们是这些集合中的每一集合都本身又是一棵树,它们是A的子树。的子树。对于对于T1,B是根,其余结点可以划分为是根,其余结点可以划分
3、为2个互不相交的集合:个互不相交的集合:T11=E,K,L T12=F T11,T12是是B的子树。的子树。HBAJFEDKLCMIG&树的示例树的示例第2页/共73页1.树中只有根结点没有前驱;树中只有根结点没有前驱;2.除根外,其余结点都有且仅一个前驱;除根外,其余结点都有且仅一个前驱;3.树的结点,可以有零个或多个后继;树的结点,可以有零个或多个后继;4.除根外的其它结点,都存在唯一条从除根外的其它结点,都存在唯一条从根到该结点的路径;根到该结点的路径;5.树是一种分支结构树是一种分支结构(除了除了一个称为根的结点外一个称为根的结点外)每个每个元素都有且仅有一个直接前元素都有且仅有一个直
4、接前趋,有且仅有零个或多个直趋,有且仅有零个或多个直接后继。接后继。HBAJFEDKLCMIG&树的逻辑结构特点树的逻辑结构特点第3页/共73页 树可表示具有分支结构关系的对象树可表示具有分支结构关系的对象例例1.家族族谱家族族谱 设某家庭有设某家庭有13个成员个成员A、B、C、D、E、F、G、H、I、J、K、L、M,他们,他们之间的关系可如图所示的树表示。之间的关系可如图所示的树表示。例例2.单位行政机构的组织关系单位行政机构的组织关系HBAJFEDKLCMIG&树的应用树的应用第4页/共73页 树是常用的数据组织形式树是常用的数据组织形式 有些应用中数据元素之间并不存在分支结构关系,但是为
5、了便于管理和使用有些应用中数据元素之间并不存在分支结构关系,但是为了便于管理和使用数据,将它们用树的形式来组织。数据,将它们用树的形式来组织。例例3.计算机的文件系统计算机的文件系统 不论是不论是DOS文件系统还是文件系统还是window文件系统,所有的文件是用树的形式来组文件系统,所有的文件是用树的形式来组织的。织的。文件夹文件夹1文件夹文件夹2文件文件1文件文件2文件夹文件夹11 文件夹文件夹11 文件文件11文件文件12C&树的应用树的应用第5页/共73页树的结点:树的结点:包含一个数据元素的包含一个数据元素的内容及若干指向子树的分支。内容及若干指向子树的分支。孩子结点:孩子结点:结点的
6、子树的根称为结点的子树的根称为该结点的孩子;如该结点的孩子;如E是是B的孩子。的孩子。双亲结点:双亲结点:B结点是结点是A结点的孩子,结点的孩子,则则A结点是结点是B结点的双亲;如结点的双亲;如B是是E的双亲。的双亲。兄弟结点:兄弟结点:同一双亲的孩子结点;如同一双亲的孩子结点;如H、I、J互为兄弟。互为兄弟。堂兄结点:堂兄结点:同一层上结点;如同一层上结点;如G与与E、F、H、I、J互为堂兄。互为堂兄。祖先结点:祖先结点:结点的祖先是从根到该结点所经分支上的所有结点;结点的祖先是从根到该结点所经分支上的所有结点;如如H的祖先为的祖先为A、D。子孙结点:子孙结点:以某结点为根的子树中的任一结点
7、称为该结点的子孙;以某结点为根的子树中的任一结点称为该结点的子孙;如如A的子孙为的子孙为B、C、D、E、F、G、H、I、J、K、L、M。HBAJFEDKLCMIG基本术语基本术语第6页/共73页结点的度:结点的度:结点子树的个数;结点子树的个数;如如D的度为的度为3。叶子结点:叶子结点:也叫终端结点,是也叫终端结点,是度为度为0的结点;如的结点;如K、L、F、G、M、I、J。分支结点:分支结点:度不为度不为0的结点;如的结点;如A、B、C、D结点层次:结点层次:根结点的层定义为根结点的层定义为1,根的孩子为第二层结点,依此,根的孩子为第二层结点,依此类推。类推。树的高度:树的高度:树中结点的最
8、大层次;如图所示树的高度为树中结点的最大层次;如图所示树的高度为4。树的度:树的度:树中各结点的度的最大值;如图所示树的度为树中各结点的度的最大值;如图所示树的度为3。森林:森林:m(m=0)棵互不相交的树的集合;棵互不相交的树的集合;HBAJFEDKLCMIG&基本术语基本术语第7页/共73页1.双亲表示法:双亲表示法:以一组连续的空间存储树的结点,通过保存每个以一组连续的空间存储树的结点,通过保存每个结点的双亲结点的位置,表示树中结点之间的结构关系。其类型结点的双亲结点的位置,表示树中结点之间的结构关系。其类型定义如下:定义如下:#define MAX_TREEE_SIZE 100type
9、def struct PTNode ElemType data;int parent;/双亲位置域双亲位置域 PTNode;typedef struct PTNode nodesMAX_TREE_SIZE;int n;/结点数结点数 Ptree;特点:找双亲容易,找孩子难特点:找双亲容易,找孩子难ARDCFEGBHKA0B0C0D1E1F3G6H6R-1K60123456789数组下标数组下标6.2 树的存储结构树的存储结构第8页/共73页 通过保存每个结点的孩子结点的位置,表示树中结点之间的结构关系。通过保存每个结点的孩子结点的位置,表示树中结点之间的结构关系。v多重链表多重链表:每个结点有
10、多个指针域,分别指向其子树的根。:每个结点有多个指针域,分别指向其子树的根。结点同构:结点的指针个数相等,为树的度结点同构:结点的指针个数相等,为树的度d。结点不同构:结点指针个数不等,为该结点的度结点不同构:结点指针个数不等,为该结点的度d。孩子表示法孩子表示法第9页/共73页v 孩子链表:其主体是一个与结点个数一样大小的一维数组,数组的每一个孩子链表:其主体是一个与结点个数一样大小的一维数组,数组的每一个元素有两个域组成,一个域用来存放结点信息,另一个用来存放指针,该指元素有两个域组成,一个域用来存放结点信息,另一个用来存放指针,该指针指向由该结点孩子组成的单链表的首位置。单链表的结构也由
11、两个域组成,针指向由该结点孩子组成的单链表的首位置。单链表的结构也由两个域组成,一个存放孩子结点在一维数组中的序号,另一个是指针域,指向下一个孩子。一个存放孩子结点在一维数组中的序号,另一个是指针域,指向下一个孩子。每个结点的孩子结点用单链表存储,再用含每个结点的孩子结点用单链表存储,再用含n个元素的结构数组指向每个孩子个元素的结构数组指向每个孩子链表链表。&孩子表示法孩子表示法第10页/共73页ARDCFEGBHKABCDEFGHRK0123456789数组下标数组下标125437896特点:找孩子容易,找双亲难特点:找孩子容易,找双亲难&孩子链表表示法图示孩子链表表示法图示第11页/共73
12、页typedef struct CTNode /孩子结点孩子结点 int child;struct CTNode *next;*ChildPtr;typedef struct ElemType data;ChildPtr firstchild;/孩子链表头指针孩子链表头指针 CTBox;typedef struct CTBox nodesMAX_TREE_SIZE;int n,r;/结点数和根的位置结点数和根的位置CTree;&孩子链表表示法类型定义孩子链表表示法类型定义第12页/共73页v 用二叉链表作树的存储结构,链表中每个结点的两个指针域分别指向其第一用二叉链表作树的存储结构,链表中每个
13、结点的两个指针域分别指向其第一个孩子结点和下一个兄弟结点。个孩子结点和下一个兄弟结点。v 特点:操作容易,但破坏了树的层次。特点:操作容易,但破坏了树的层次。v 孩子兄弟表示法类型定义:孩子兄弟表示法类型定义:typedef struct CSNode ElemType data;struct CSNode *firstchild,*nextsibling;CSNode,*CSTree;孩子兄弟表示法孩子兄弟表示法第13页/共73页ARDCFEGBHKR AD B E C F G H K 利用树的孩子兄弟链表这种存储结构便利用树的孩子兄弟链表这种存储结构便于实现各种树的操作。例如找某结点的第于
14、实现各种树的操作。例如找某结点的第i个个孩子,则只要先从左指针域中找到第孩子,则只要先从左指针域中找到第1个孩个孩子结点上,然后沿着孩子结点的子结点上,然后沿着孩子结点的next域连续域连续走走i-1步便可找到第步便可找到第i个孩子。如增加一个个孩子。如增加一个parent域,则也能方便实现求双亲的操作。域,则也能方便实现求双亲的操作。&孩子兄弟表示法孩子兄弟表示法第14页/共73页二叉树的基本概念二叉树的基本概念 或为空树,或由根及至多两棵互不相交的左子树、右子树构成或为空树,或由根及至多两棵互不相交的左子树、右子树构成(即不存在度大于即不存在度大于2的结点的结点),并且左、右子树本身也是二
15、叉树。,并且左、右子树本身也是二叉树。说明:说明:1.二叉树中每个结点最多有两棵子二叉树中每个结点最多有两棵子树,二叉树每个结点度小于等于树,二叉树每个结点度小于等于2;2.左、右子树不能颠倒左、右子树不能颠倒有序树;有序树;3.二叉树是递归结构,在二叉树的定二叉树是递归结构,在二叉树的定义中又用到了二叉树的概念。义中又用到了二叉树的概念。BADCFEG6.3 二叉树二叉树第15页/共73页 (a)(b)(c)(d)(e)(a)空树空树 (b)只含根结点只含根结点 (c)右子树为空树右子树为空树 (d)左右子树均不为空树左右子树均不为空树 (e)左子树为空树左子树为空树LLRR&二叉树的形态二
16、叉树的形态第16页/共73页621754389101113141512621754389 1011 122154367216543非完全二叉树非完全二叉树完全二叉树完全二叉树满满二二叉叉树树&两种特殊的二叉树两种特殊的二叉树第17页/共73页满二叉树:满二叉树:深度为深度为k的二叉树,有的二叉树,有2k-1个结点则称为满二叉树;个结点则称为满二叉树;完全二叉树:完全二叉树:如果深度为如果深度为k、由、由n个结点的二叉树中个结点能够与深度为个结点的二叉树中个结点能够与深度为k的顺的顺序编号的满二叉树从序编号的满二叉树从1到到n标号的结点相对应,则称为完全二叉树。标号的结点相对应,则称为完全二叉树
17、。完全二叉树的特点是:完全二叉树的特点是:1.所有的叶结点都出现在第所有的叶结点都出现在第k层或层或k1层。层。2.对任一结点,如果其右子树的最大层次为对任一结点,如果其右子树的最大层次为l,则其左子树的最大层次为,则其左子树的最大层次为 l 或或 l 1。&两种特殊的二叉树两种特殊的二叉树第18页/共73页性质性质1 在二叉树的第在二叉树的第 i 层上至多有层上至多有 2i-1个结点。个结点。(i 1)证明用归纳法证明用归纳法证明:当证明:当i=1时,只有根结点,时,只有根结点,2 i-1=2 0=1。假设对所有假设对所有j,1ji,命题成立,即第,命题成立,即第j层上至多有层上至多有2 j
18、-1 个结点。个结点。由归纳假设第由归纳假设第i-1 层上至多有层上至多有 2i-2个结点。个结点。由于二叉树的每个结点的度至多为由于二叉树的每个结点的度至多为2,故在第,故在第i层上的最大结点数为第层上的最大结点数为第i-1层上的层上的最大结点数的最大结点数的2倍,即倍,即22i-2=2 i-1。二叉树的性质二叉树的性质第19页/共73页性质性质2 深度为深度为 k 的二叉树至多有的二叉树至多有 2 k-1个结点个结点(k 1)。证明:由性质证明:由性质1可见,深度为可见,深度为k的二叉树的最大结点数为的二叉树的最大结点数为 20+21+2 k-1=2 k-1&二叉树的性质二叉树的性质第20
19、页/共73页性质性质3 对任何一棵二叉树对任何一棵二叉树T,如果其叶结点数为,如果其叶结点数为 n0,度为,度为2的结点数为的结点数为 n2,则,则n0n21。证明:证明:设二叉树中度为设二叉树中度为1的结点数为的结点数为n1,二叉树中总结点数为:,二叉树中总结点数为:nn0n1n2 二叉树中的分支数,除根结点外,其余结点都有一个进入分支,设二叉树中的分支数,除根结点外,其余结点都有一个进入分支,设B为二为二叉树中的分支总数,叉树中的分支总数,则有:则有:nB1。由于这些分支都是由度为由于这些分支都是由度为1和和2的结点射出的,所以有:的结点射出的,所以有:Bn1+2 n2 ;nB1n12n2
20、1得到:得到:n0n21&二叉树的性质二叉树的性质第21页/共73页性质性质 4:具有:具有 n 个结点的完全二叉树的深度为个结点的完全二叉树的深度为 log2n +1。证明:设完全二叉树的深度为证明:设完全二叉树的深度为 k,则根据性质,则根据性质2和完全二叉树的定义有和完全二叉树的定义有2k-1-1 n 2k-1或或 2k-1 n 2k取对数取对数 k-1 1,则其双亲是结点,则其双亲是结点 i/2 。2.如果如果2in,则结点,则结点i为叶子结点,无左孩子;否则,其左孩子是结点为叶子结点,无左孩子;否则,其左孩子是结点2i。3.如果如果2i1n,则结点,则结点i无右孩子;否则,其右孩子是
21、结点无右孩子;否则,其右孩子是结点2i1。&二叉树的性质二叉树的性质第23页/共73页v 顺序存储结构顺序存储结构 它是用一组连续的存储单元存储二叉树的数据元素。因此,必须把二叉树它是用一组连续的存储单元存储二叉树的数据元素。因此,必须把二叉树的所有结点安排成为一个恰当的序列,结点在这个序列中的相互位置能反映出的所有结点安排成为一个恰当的序列,结点在这个序列中的相互位置能反映出结点之间的逻辑关系,用编号的方法:结点之间的逻辑关系,用编号的方法:#define MAX-TREE-SIZE 100 typedef TElemType SqBiTreeMAX-TREE-SIZE;二叉树的存储结构二叉
22、树的存储结构第24页/共73页 通常是按照二叉树结点从上至下、从左到右的顺序存储,但这样结点在存储位通常是按照二叉树结点从上至下、从左到右的顺序存储,但这样结点在存储位置上的前驱后继关系并不一定就是它们在逻辑上的邻接关系,只有通过一些方法置上的前驱后继关系并不一定就是它们在逻辑上的邻接关系,只有通过一些方法确定某结点在逻辑上的前驱结点和后继结点,这种存储才有意义。依据二叉树的确定某结点在逻辑上的前驱结点和后继结点,这种存储才有意义。依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映出结点
23、之间的逻辑关系,这样既能够最大可能地节省存储空间,又可以利地反映出结点之间的逻辑关系,这样既能够最大可能地节省存储空间,又可以利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。&顺序存储结构顺序存储结构第25页/共73页FBAGEDCHIJKL例如:例如:bt3的双亲为的双亲为3/2=1,即在,即在bt1中;中;其左孩子在其左孩子在bt2i=bt6中;中;其右孩子在其右孩子在bt2i+1=bt7中。中。如何反映结点之如何反映结点之间的逻辑关系?间的逻辑关系?A1B2C3D4E5F6G7H8I9J10K11L12&完
24、全二叉树的顺序表示完全二叉树的顺序表示第26页/共73页 一般二叉树也按完全二叉树形式存储,只有增添一些并不一般二叉树也按完全二叉树形式存储,只有增添一些并不存在的空结点存在的空结点(用用表示,表示,表示该处没有元素存在,仅仅为了好表示该处没有元素存在,仅仅为了好理解理解),使之成为一棵完全二叉树的形式,然后再用一维数组顺,使之成为一棵完全二叉树的形式,然后再用一维数组顺序存储。序存储。A1B2C3D45E6F7G8H910111213I14J15EBAFDCGHIJ例如对于例如对于B结点而言:结点而言:bt2的双亲为的双亲为1/2=1,即在,即在bt1中中(为为A);其左孩子在其左孩子在bt
25、2i=bt4中中(为为D);其右孩子在其右孩子在bt2i+1=bt5中中(为为)。&一般二叉树的顺序表示一般二叉树的顺序表示第27页/共73页 这种存储结构适合于完全二叉树,既不浪费存储空间,又能很快确定结点这种存储结构适合于完全二叉树,既不浪费存储空间,又能很快确定结点的存放位置、以及结点的双亲和左右孩子的存放位置,但对一般二叉树,可能的存放位置、以及结点的双亲和左右孩子的存放位置,但对一般二叉树,可能造成存储空间的浪费。造成存储空间的浪费。例如,深度为例如,深度为k,且只有,且只有k个结点的右单枝树个结点的右单枝树(每个非叶每个非叶结点只有右孩子结点只有右孩子),也需,也需2k-1个个单元
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 二叉
限制150内