您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > 数据结构课件 第6章 树和二叉树
DataStructurePage12020/1/2910086510第六章树和二叉树DataStructurePage22020/1/29学习目标领会树和二叉树的类型定义,理解树和二叉树的结构差别。熟记二叉树的主要特性,并掌握它们的证明方法。熟练掌握二叉树的各种遍历算法,并能灵活运用遍历算法实现二叉树的其它操作。理解二叉树的线索化过程以及在中序线索化树上找给定结点的前驱和后继的方法。熟练掌握二叉树和树的各种存储结构及其建立的算法。学会编写实现树的各种操作的算法。了解最优树的特性,掌握建立最优树和赫夫曼编码的方法。DataStructurePage32020/1/29重点和难点重点:二叉树和树的遍历及其应用。难点:编写实现二叉树和树的各种操作的递归算法。知识点树的类型定义、二叉树的类型定义二叉树的存储表示二叉树的遍历以及其它操作的实现线索二叉树树和森林的存储表示树和森林的遍历以及其它操作的实现最优树和赫夫曼编码DataStructurePage42020/1/29树型结构是一类非常重要的非线性数据结构。DataStructurePage52020/1/296.1树的定义和基本术语——树(tree)的定义是n(n0)个结点的有限集T;在任意一棵非空树中,有且仅有一个特定的结点,称为树的根(root);当n1时,其余结点可分为m(m0)个互不相交的有限集T1,T2,……Tm,其中每一个集合本身又是一棵树,称为根的子树(subtree)。特点:非空树中至少有一个结点——根;树中各子树是互不相交的集合。树的定义是采用递归方法DataStructurePage62020/1/29AABCDEFGHIJKLM只有根结点的树有子树的树根子树DataStructurePage72020/1/29(a)一棵树结构(b)一个非树结构(c)一个非树结构树中各子树互不相交的含义ACBGFEDHIACBGFDACBGFDE两点①某结点不能同时属于两个子集,如图(b)所示;②两个子集的结点之间不能有关系,如图(c)所示.DataStructurePage82020/1/29结点的度:结点所拥有的子树的个数。树的度:树中各结点度的最大值。CGBDEFKLHMIJA6.1树的定义和基本术语——树的基本术语DataStructurePage92020/1/29叶子结点:度为0的结点,也称为终端结点。分支结点:度不为0的结点,也称为非终端结点。CGBDEFKLHMIJA6.1树的定义和基本术语——树的基本术语DataStructurePage102020/1/29孩子、双亲:树中某结点子树的根结点称为这个结点的孩子结点,这个结点称为它孩子结点的双亲结点;兄弟:具有同一个双亲的孩子结点互称为兄弟。CGBDEFKLHMIJA6.1树的定义和基本术语——树的基本术语DataStructurePage112020/1/29路径:如果树的结点序列n1,n2,…,nk有如下关系:结点ni是ni+1的双亲(1=ik),则把n1,n2,…,nk称为一条由n1至nk的路径;路径上经过的边的个数称为路径长度。CGBDEFKLHMIJA6.1树的定义和基本术语——树的基本术语DataStructurePage122020/1/29祖先、子孙:在树中,如果有一条路径从结点x到结点y,那么x就称为y的祖先,而y称为x的子孙。CGBDEFKLHMIJA6.1树的定义和基本术语——树的基本术语DataStructurePage132020/1/29结点所在层数:根结点的层数为1;对其余任何结点,若某结点在第k层,则其孩子结点在第k+1层。树的深度:树中所有结点的最大层数,也称高度。1层2层4层3层高度=4CGBDEFKLHMIJC6.1树的定义和基本术语——树的基本术语DataStructurePage142020/1/29CBDEFKLHJA71234568910层序编号:将树中结点按照从上层到下层、同层从左到右的次序依次给他们编以从1开始的连续自然数。6.1树的定义和基本术语——树的基本术语DataStructurePage152020/1/29有序树、无序树:如果一棵树中结点的各子树从左到右是有次序的,称这棵树为有序树;反之,称为无序树。数据结构中讨论的一般都是有序树ACBGFEDACBGFED6.1树的定义和基本术语——树的基本术语DataStructurePage162020/1/29CBDEFKLHJ森林:m(m≥0)棵互不相交的树的集合。A6.1树的定义和基本术语——树的基本术语DataStructurePage172020/1/29同构:对两棵树,若通过对结点适当地重命名,就可以使这两棵树完全相等(结点对应相等,结点对应关系也相等),则称这两棵树同构。ACBGFEDDAECFBG6.1树的定义和基本术语——树的基本术语DataStructurePage182020/1/29ABCDEFGHIJKLM结点A的度:3结点B的度:2结点M的度:0叶子:K,L,F,G,M,I,J结点A的孩子:B,C,D结点B的孩子:E,F结点I的双亲:D结点L的双亲:E结点B,C,D为兄弟结点K,L为兄弟树的度:3结点A的层次:1结点M的层次:4树的深度:4结点A是结点F,G的祖先结点F,G为堂兄弟DataStructurePage192020/1/29树的抽象数据类型的定义ADTTree{数据对象:D是具有相同特性的数据元素的集合。数据关系:若D为空集,则称为空树;若D中仅含一个数据元素,则关系R为空集;若D中含多于一个数据元素,则R={H},H是如下二元关系:(1)在D中存在唯一的称为根的数据元素root,它在关系H下无前驱;(2)当n1时,其余数据元素可分为m(m0)个互不相交的(非空)有限集T1,T2,…,Tm,其中每一个子集本身又是一棵符合本定义的树,称为根root的子树,每一棵子树的根xi都是根root的后继,即root,xiH,i=1,2,…,m。DataStructurePage202020/1/29基本操作:InitTree(&T);操作结果:构造空树T。CreateTree(&T,definition);初始条件:definition给出树T的定义。操作结果:按definition构造树T。DestroyTree(&T);初始条件:树T存在。操作结果:销毁树T。TreeEmpty(T);初始条件:树T存在。操作结果:若T为空树,则返回TRUE,否则返回FALSE。DataStructurePage212020/1/29TreeDepth(T);初始条件:树T存在。操作结果:返回T的深度。Root(T);初始条件:树T存在。操作结果:返回T的根。Value(T,cur_e);初始条件:树T存在,cur_e是T中某个结点。操作结果:返回cur_e的值。DataStructurePage222020/1/29Parent(T,cur_e);初始条件:树T存在,cur_e是T中某个结点。操作结果:若cur_e是T的非根结点,则返回它的双亲,否则返回“空”。LeftChild(T,cur_e);初始条件:树T存在,cur_e是T中某个结点。操作结果:若cur_e是T的非叶子结点,则返回它的最左孩子,否则返回“空”。RightSibling(T,cur_e);初始条件:树T存在,cur_e是T中某个结点。操作结果:若cur_e有右兄弟,则返回它的右兄弟,否则返回“空”。DataStructurePage232020/1/29TraverseTree(T,visit());初始条件:树T存在,visit是对结点操作的应用函数。操作结果:按某种次序对T的每个结点调用函数visit()一次且至多一次。一旦visit()失败,则操作失败。Assign(T,cur_e,value);初始条件:树T存在,cur_e是T中某个结点。操作结果:结点cur_e赋值为value。ClearTree(&T);初始条件:树T存在。操作结果:将树T清为空树。DataStructurePage242020/1/29InsertChild(&T,&p,i,c);初始条件:树T存在,p指向T中某个结点,1≤i≤p所指结点的度+1,非空树c与T不相交。操作结果:插入c为T中p所指结点的第i棵子树。DeleteChild(&T,&p,i);初始条件:树T存在,p指向T中某个结点,1≤i≤p指结点的度。操作结果:删除T中p所指结点的第i棵子树。}ADTTreeDataStructurePage252020/1/29树的表示方法树形表示法:自然界倒长的树;文氏表示法:用集合表示;凹入表示法:类似书目;嵌套括号表示法:广义表表示法。树形文氏ABDCG凹入ABCDG嵌套括号(A(B,C(G),D))DataStructurePage262020/1/29树和线性结构对照线性结构树结构存在唯一的没有前驱的首元素存在唯一的没有前驱的根结点存在唯一的没有后继的尾元素存在多个没有后继的叶子其余元素均存在唯一的前驱元素和唯一的后继元素其余结点均存在唯一的前驱(双亲)结点和多个后继(孩子)结点DataStructurePage272020/1/296·2二叉树二叉树的定义是n(n=0)个结点的有限集,其子树分为互不相交的两个集合,分别称为左子树和右子树,左子树和右子树也是二叉树。ABCDEIJGH根结点左子树右子树DataStructurePage282020/1/29二叉树不是树的特例。特点每个结点至多有二棵子树(即不存在度大于2的结点);二叉树的子树有左、右之分,且其次序不能任意颠倒。基本形态AABABABC空二叉树只有根结点的二叉树右子树为空左子树为空左、右子树均非空DataStructurePage292020/1/29斜树1.所有结点都只有左子树的二叉树称为左斜树;2.所有结点都只有右子树的二叉树称为右斜树;3.左斜树和右斜树统称为斜树。1.在斜树中,每一层只有一个结点;2.斜树的结点个数与其深度相同。几种特殊形式的二叉树斜树的特点:ABCABCDataStructurePage302020/1/29几种特殊形式的二叉树满二叉树深度为k且有2k-1个结点的二叉树。特点每一层上的结点数都是最大结点数;所有的分支结点的度数都为2;叶子结点都在同一层次上。123114589121367101415DataStructurePage312020/1/29几种特殊形式的二叉树完全二叉树若对满二叉树的结点从上到下从左至右进行编号,则深度为k且有n个结点的二叉树称为完全二叉树,当且仅当其每一个结点都与深度为k的满二叉树的编号从1到n一一对应时。特点叶子结点只可能在层次最大的两层上出现;前k-1层中的结点都是“满”的,且第k层的结点都集中在左边。123114589126710DataStructurePage322020/1/29判断是否为完全二叉树,说明理由。1234567123456思考:满二叉树与完全二叉树的关系?DataStructurePage332020/1/29在满二叉树中,从最后一个结点开始,连续去掉任意个结点,即是一棵完全二叉树。A1523467910BCDEFGHIJK11L12M13N14O158A15234678910BCDEFGHIJ不是完全二叉树,结点10与满二叉树中的结点10不是同一个结点DataStructurePage342020/1/29二叉树的性质性质1:在二叉树的第i层至多有2i-1个结点(i1)。性质2:深度为k的二叉树至多有2k-1个结点。性质3:对于任何一棵二叉树T,若其终端结点(叶子)数为n0,度为1的结点数为n1,度为2的结点数n2,则n0=n2+1。DataStructurePage352020/1/29性质4:具有n个结点的完全二叉树的深度是log2
本文标题:数据结构课件 第6章 树和二叉树
链接地址:https://www.777doc.com/doc-3381685 .html