资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,单击此处编辑母版标题样式,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,执行校长,李 伟,树和二叉树,数据结构,(,第十一讲,),2024/11/6,1,课程回顾,什么是稀疏矩阵,稀疏矩阵表示,广义表定义,2024/11/6,2,本讲目录,树的定义和基本术语,二叉树,树的定义,树的基本术语,二叉树的定义,二叉树的性质,二叉树的存储结构,2024/11/6,3,本讲重点、难点,重点,二叉树的定义,二叉树的性质,二叉树的存储结构,难点,二叉树的定义,二叉树的性质,2024/11/6,4,树的定义和基本术语,树的定义和基本术语,二叉树,树的定义,树的基本术语,2024/11/6,5,树的定义,树型结构是一类重要的非线性数据结构。直观看来树是以分支关系定义的层次结构。,树型结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树来形象表示。,树在计算机领域中也有着广泛的应用,如在数据库系统中,可用树来组织信息;在分析算法的行为时,可用树来描述其执行过程。,2024/11/6,6,树的定义,示例:家族树,2024/11/6,7,树,栈和队列,数组和广义表,线性表和广义表,数据结构,线性表,广义表,栈,队列,树的定义,示例,本书的目录,2024/11/6,8,树的定义,树的定义,树是由,n(n,0),个结点组成的有限集合。,如果,n=0,,称为空树;,如果,n 0,,则,:,有一个特定的称之为,根,(root),的结点,它只有后继,但没有前驱;,除根以外的其它结点划分为,m(m0),个互不相交的有限集合,T,1,T,2,T,m,。,每个集合本身又是一棵树,并且称之为根的,子树,(subTree),。,每棵子树的根结点有且仅有一个直接前驱,但可以有,0,个或多个后继。,树的定义是,递归,的。,2024/11/6,9,树的定义,示例,图,(a),是一棵空树,没有结点,图,(b),是一棵只有根结点的树,根结点是,A,图,(c),是一棵有,13,个结点的树,其中,A,是根结点,三个互不相交的子集:,T,1,=B,E,F,K,L,T,2,=C,G,T,3,=D,H,I,J,M,2024/11/6,10,树的定义,抽象数据类型树的定义,ADT Tree,数据对象,D,:,D,是具有相同特性的数据元素的集合。,数据关系,R,:若,D,为空集,则称为空树;,否则,:,(1),在,D,中存在唯一的称为根的数据元素,root,(2),当,n1,时,其余结点可分为,m(m0),个互,不相交的有限集,T,1,T,2,T,m,其中每一,棵子集本身又是一棵符合本定义的树,,称为根,root,的子树。,基本操作,P,:,(,见教材,),ADT Tree,2024/11/6,11,树的表示,树的逻辑表示方法有多种,常见的有,:,树形图表示法,嵌套集合表示法(文氏图表示法),凹入表示法,广义表表示法,树的定义,2024/11/6,12,树的基本术语,基本术语,结点:,数据元素,+,若干指向子树的分支,结点的度:,分支的个数(或 子树的个数),叶子结点(终端结点):,度为零的结点,分支结点(非终端结点):,度不等于零的结点,树的度:,树中所有结点的度的最大值,孩子结点:,结点的子树的根结点为该结点的孩子结点,双亲结点:,与孩子结点相对应的结点,兄弟结点:,同一个双亲的孩子结点之间的互称,祖先结点:,从根结点起到该结点所经分支上的所有结点,子孙结点:,以某结点为根的子树中的任意结点,2024/11/6,13,树的基本术语,基本术语,层次:,从根结点起,根结点为第一层,跟的孩子为第二层,依次类推,假设根结点的层次为,1,第,l,层的结点的子树根结点的层次为,l+1,堂兄弟:,双亲在同一层的结点互称,深度:,树中叶子结点所在的最大层次,有序树:,子树之间存在确定的次序关系,无序树:,子树之间不存在确定的次序关系,森林:,是,m,(,m0,)棵互不相交的树的集合。,任何一棵非空树是一个二元组,Tree=,(,root,,,F,),其中:,root,被称为根结点,,F,被称为子树森林,C,G,F,H,I,J,M,D,E,K,L,B,F,A,root,2024/11/6,14,二叉树,树的定义和基本术语,二叉树,二叉树的定义,二叉树的性质,二叉树的存储结构,2024/11/6,15,二叉树的定义,二叉树的定义,二叉树是由,n(n=0),个结点的有限集合构成,此集合或者为空集,或者由一个根结点及两棵互不相交的左右子树组成,并且左右子树都是二叉树。,二叉树的每个结点至多只有两棵子树(结点的度最多为,2,)。,二叉树的子树有左右之分,其次序不能任意颠倒。,根结点,右子树,左子树,E,F,H,K,C,B,A,D,G,E,F,2024/11/6,16,二叉树的定义,抽象数据类型二叉树的定义,ADT BinaryTree,数据对象,D,:,D,是具有相同特性的数据元素的集合。,数据关系,R,:若,D,为空集,则称为空二叉树;,否则,:,(1),在,D,中存在唯一的称为根的数据元素,root,(2),当,n1,时,其余结点可分为,2,个互不相交的有限集,Dl,,,Dr,(3),若,Dl,,,Dr,都不为空集,则,Dl,,,Dr,本身又是一棵符合,本定义的二叉树,称为根,root,的左右子树。,基本操作,P,:,(,见教材,),ADT BinaryTree,2024/11/6,17,二叉树的定义,二叉树的,5,种基本形态,A,A,B,A,B,A,C,B,(b),根和空的左右子树,(c),根和左子树,(d),根和右子树,(e),根和左右子树,(a),空二叉树,2024/11/6,18,皮肌炎是一种引起皮肤、肌肉、心、肺、肾等多脏器严重损害的,全身性疾病,而且不少患者同时伴有恶性肿瘤。它的1症状表现如下:,1、早期皮肌炎患者,还往往伴有全身不适症状,如-全身肌肉酸痛,软弱无力,上楼梯时感觉两腿费力;举手梳理头发时,举高手臂很吃力;抬头转头缓慢而费力。,皮肌炎图片,皮肌炎的症状表现,53,!,=30,棵,二叉树的定义,示例:由三个结点组成的二叉树的基本类型有几种?,由三个结点组成的二叉树的基本形态有,5,种。,如果这三个结点分别是,A,B,C,。则可以组成几棵二叉树?,2024/11/6,20,二叉树的性质,二叉树的性质,性质,1,:在二叉树的第,i,层上至多有,2,i-1,个结点。,(i1),证明:,用归纳法证明:,归纳基:,i,=,1,层时,只有一个根结点,,2,i-1,=,2,0,=,1,;,归纳假设:假设对所有的,j,,,1,j,i,,命题成立,;,归纳证明:二叉树上每个结点至多有两棵子树,则第,i,层的结点数,=2,i-2,2=2,i-1,。,按照题意,二叉树除最后一层,其余每一层上的结点都有两个孩子结点,则每一层均比上一层的结点个数多一倍。,按照等比数列的定义,每一项都可以看作是相应每一层上的结点个数,则,,a,i,=a,i,*q,i-1,=2,i-1,2024/11/6,21,二叉树的性质,性质,2,:深度为,k,的二叉树上至多含,2,k-1,个结点(,k1,),证明:,基于上一条性质,深度为,k,的二叉树上的结点数至多为,2,0,+2,1,+,+2,k-1,=2,k-1,2024/11/6,22,二叉树的性质,性质,3,:,对任何一棵二叉树,若它含有,n,0,个叶子结点、,n,2,个度为,2,的结点,,则必存在关系式:,n,0,=n,2,+1,证明:,设 二叉树上结点总数,n=n,0,+n,1,+n,2,又 二叉树上分支总数,B=n,1,+2n,2,而,B=n-1=n,0,+n,1,+n,2,1,由此,,n,0,=n,2,+1,2024/11/6,23,满二叉树,:,指的是深度为,k,且含有,2,k,-1,个结点的二叉树。,完全二叉树,:树中所含的,n,个结点和满二叉树中,编号为,1,至,n,的结点,一一对应。,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,a,b,c,d,e,f,g,h,i,j,特点:每一层上的结点数都是最大结点数,特点:,叶子结点只能在层次最大的两层出现,任意结点,若其右分支下的子孙最大层数为,L,则左分支下的子孙的最大层次为,L,或,L+1,两类特殊的二叉树,二叉树的性质,2024/11/6,24,性质,4,:具有,n,个结点的完全二叉树的深度为,log2n,+1,证明,:,设 完全二叉树的深度为,k,则 根据第二条性质得,2,k-1,n 2,k,即,k-1 log,2,n n,,则该结点无左孩子,,否则,编号为,2i,的结点为其,左孩子,结点;,若,2i+1n,,则该结点无右孩子结点,,否则,编号为,2i+1,的结点为其,右孩子,结点。,二叉树的性质,2024/11/6,26,二叉树的存储结构,顺序存储结构,它是用一组连续的存储单元存储二叉树的数据元素。,必须把二叉树的所有结点安排成为一个恰当的序列,结点在这个序列中的相互位置能反映出结点之间的逻辑关系,用编号的方法:从树根起,自上层至下层,每层自左至右的给所有结点编号。,顺序存储表示,#define MAX_TREE_SIZE 100,typedef int TElemType;,typedef TElemType SqBiTreeMAX_TREE_SIZE,;,SqBiTree bt;,2024/11/6,27,二叉树的存储结构,示例:完全二叉树,的数组表示,2024/11/6,28,二叉树的存储结构,示例:一般二叉树的数组表示,0,0,0,0,0,2024/11/6,29,二叉树的存储结构,顺序存储结构的缺点,由于一般二叉树必须仿照完全二叉树那样存储,可能会浪费很多存储空间,单支树就是一个极端情况。,若经常需要插入与删除树中结点时,顺序存储方式需要大量移动数据。,2024/11/6,30,二叉树的存储结构,链式存储结构,二叉链表,二叉链表结构:数据域、左指针域、右指针域,l,child data,r,child,二叉链表存储表示:,typedef char TElemType;,typedef struct BiTNode,TElemType data;,struct BiTNode *lchild,,*,rchild,;,/,左右孩子指针,BiTNode,,*,BiTree,;,2024/11/6,31,二叉树的存储结构,链式存储结构,三叉链表,三叉链表结构:数据域、左指针域、右指针域、双亲指针域,lchild data parent rchild,思考:二叉树的三叉链表存储表示如何定义?,2024/11/6,32,二叉树的存储结构,二叉树链式存储结构示例,2024/11/6,33,教学内容,树的定义和基本术语,二叉树,树的定义,树的基本术语,二叉树的定义,二叉树的性质,二叉树的存储结构,2024/11/6,34,本讲总结,为什么说树的定义是递归的?,二叉树的性质有哪些?,二叉树的顺序存储结构有什么缺点?,2024/11/6,35,上机实验,实验,14-1,建立一棵含有,n,个结点的二叉树,采用二叉链表存储(,ex6-1.c,),2024/11/6,36,Thank You!,2024/11/6,37,
展开阅读全文