数据结构(严蔚敏)课件第6章.pptx
《数据结构(严蔚敏)课件第6章.pptx》由会员分享,可在线阅读,更多相关《数据结构(严蔚敏)课件第6章.pptx(176页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、14 二月 2023第1页【课前思考】1.你见过家族谱系图吗?试以图形表示从你的祖父起的家族成员关系。2.这类图形正是本章要讨论的树结构,你试用关系(即有序对的集合)表示上列的家族谱系图。上列家族谱系图可用如下关系表示:,第1页/共176页14 二月 2023第2页【学习目标】1领会树和二叉树的类型定义,理解树和二叉树的结构差别。2熟记二叉树的主要特性,并掌握它们的证明方法。3熟练掌握二叉树的各种遍历算法,并能灵活运用遍历算法实现二叉树的其它操作。4理解二叉树的线索化过程以及在中序线索化树上找给定结点的前驱和后继的方法。5熟练掌握二叉树和树的各种存储结构及其建立的算法。6学会编写实现树的各种操
2、作的算法。7了解最优树的特性,掌握建立最优树和赫夫曼编码的方法。第2页/共176页14 二月 2023第3页【重点和难点】二叉树和树的遍历及其应用是本章的学习重点,而编写实现二叉树和树的各种操作的递归算法也恰是本章的难点所在。【知识点】树的类型定义、二叉树的类型定义、二叉树的存储表示、二叉树的遍历以及其它操作的实现、线索二叉树、树和森林的存储表示、树和森林的遍历以及其它操作的实现、最优树和赫夫曼编码第3页/共176页14 二月 2023第4页【学习指南】本章是整个课程的第二个学习重点,也是整个课程中的一大难点。在本章的学习过程中主要应该学会如何根据二叉树和树的结构及其操作的递归定义编写递归算法
3、。本 章 必 须 完 成 的 算 法 设 计 题 为:6.27,6.28,6.33,6.41,6.43,6.45,6.46,6.47,6.49,6.50,6.51,6.57,6.59,6.68和6.66。第4页/共176页14 二月 2023第5页6.1树的类型定义树的类型定义6.2 6.2 二叉树的类型定义二叉树的类型定义6.3 二叉树的存储结构二叉树的存储结构6.4二叉树的遍历二叉树的遍历6.5线索二叉树线索二叉树6.6树和森林的表示方法树和森林的表示方法6.7树和森林的遍历树和森林的遍历6.8哈夫曼树与哈夫曼编码哈夫曼树与哈夫曼编码第5页/共176页14 二月 2023第6页6.1树的类
4、型定义树的类型定义树是由n(n0)个结点组成的有限集合。若n=0,称为空树;若n0,则:(1)其中必有一个称为根(root)的特定结点,它没有直接前驱,但有零个或多个直接后继;(2)除根结点以外的其它n-1结点可以划分为m(m0)个互不相交的有限集合T0,T1,Tm-1,每个集合Ti(i=0,1,m-1)又是一棵树,称为根的子树,每棵子树的根结点有且仅有一个直接前驱,但可以有0个或多个直接后继。由此可知,树的定义是一个递归的定义,即树的定义中又用到了树的概念。第6页/共176页14 二月 2023第7页ADTTree数据对象数据对象D:D是具有相同特性的数据元素的集合。是具有相同特性的数据元素
5、的集合。若若D为空集,则称为空树为空集,则称为空树。否则否则:(1)在在D中存在唯一的称为根的数据元素中存在唯一的称为根的数据元素root;(2)当当n1时,其余结点可分为时,其余结点可分为m(m0)个互个互不相交的有限集不相交的有限集T1,T2,Tm,其中每一,其中每一棵子集本身又是一棵符合本定义的树,棵子集本身又是一棵符合本定义的树,称为根称为根root的子树。的子树。数据关系数据关系R:第7页/共176页14 二月 2023第8页 基本操作:基本操作:查查找找类类插插入入类类删删除除类类ADTTree第8页/共176页14 二月 2023第9页 Root(T)/求树的根结点求树的根结点查
6、找类:查找类:Value(T,cur_e)/求当前结点的元素值求当前结点的元素值Parent(T,cur_e)/求当前结点的双亲结点求当前结点的双亲结点LeftChild(T,cur_e)/求当前结点的最左孩子求当前结点的最左孩子RightSibling(T,cur_e)/求当前结点的右兄弟求当前结点的右兄弟TreeEmpty(T)/判定树是否为空树判定树是否为空树TreeDepth(T)/求树的深度求树的深度TraverseTree(T,Visit()/遍历遍历第9页/共176页14 二月 2023第10页InitTree(&T)/初始化置空树初始化置空树插入类:插入类:CreateTree
7、(&T,definition)/按定义构造树按定义构造树Assign(T,cur_e,value)/给当前结点赋值给当前结点赋值InsertChild(&T,&p,i,c)/将以将以c为根的树插入为结点为根的树插入为结点p的第的第i棵子树棵子树第10页/共176页14 二月 2023第11页 ClearTree(&T)/将树清空将树清空删除类:删除类:DestroyTree(&T)/销毁树的结构销毁树的结构DeleteChild(&T,&p,i)/删除结点删除结点p的第的第i棵子树棵子树第11页/共176页14 二月 2023第12页ABCDEFGHIJMKLA(B(E,F(K,L),C(G)
8、,D(H,I,J(M)T1T3T2树根例如例如:第12页/共176页14 二月 2023第13页()有确定的根;()树根和子树根之间为有向关系。有向树:有向树:有序树:有序树:子树之间存在确定的次序关系。无序树:无序树:子树之间不存在确定的次序关系。第13页/共176页14 二月 2023第14页对比对比树型结构树型结构和和线性结构线性结构的结构特点的结构特点一棵树的逻辑结构可以用二元组描述为:tree=(k,R)k=ki 1in;n0,ki elemtypeR=r其中,n为树中结点个数,若n=0,则为一棵空树,n0时称为一棵非空树,而关系r应满足下列条件:(1)有且仅有一个结点没有前驱,称该
9、结点为树根;(2)除根结点以外,其余每个结点有且仅有一个直接前驱;(3)树中每个结点可以有多个直接后继(孩子结点)。第14页/共176页14 二月 2023第15页线性结构线性结构树型结构树型结构第一个数据元素第一个数据元素 (无前驱无前驱)根结点根结点 (无前驱无前驱)最后一个数据元素最后一个数据元素(无后继无后继)多个叶子结点多个叶子结点 (无后继无后继)其它数据元素其它数据元素(一个前驱、一个前驱、一个后继一个后继)其它数据元素其它数据元素(一个前驱、一个前驱、多个后继多个后继)第15页/共176页14 二月 2023第16页基基 本本 术术 语语第16页/共176页14 二月 2023
10、第17页结点结点:结点的度结点的度:树的度树的度:叶子结点叶子结点:分支结点分支结点:数据元素+若干指向子树的分支分支的个数树中所有结点的度的最大值度为零的结点度大于零的结点HIJMDD第17页/共176页14 二月 2023第18页(从根到结点的)路径路径:孩子孩子结点、双亲双亲结点兄弟兄弟结点、堂兄弟祖先祖先结点、子孙子孙结点结点的层次结点的层次:树的深度:树的深度:由从根根到该结点所经分支和结点构成ABCDEFGHIJMKL假设根结点的层次为1,第l 层的结点的子树根结点(即孩子结点)的层次为l+1树中叶子结点所在的最大层次第18页/共176页14 二月 2023第19页任何一棵非空树是
11、一个二元组Tree=(root,F)其中:root 被称为根结点 F 被称为子树森林森林:森林:是m(m0)棵互不相交的树的集合ArootBCDEFGHIJMKLF第19页/共176页14 二月 2023第20页6.2 二叉树的类型定义二叉树的类型定义第20页/共176页14 二月 2023第21页 二叉树或为空树空树,或是由一个根结根结点点加上两棵两棵分别称为左子树左子树和右子树的、互不交的互不交的二叉树二叉树组成。ABCDEFGHK根结点左子树右子树第21页/共176页14 二月 2023第22页二叉树的特点:(1)每个结点的度都不大于2,即每个结点的度为0、1或2;(2)每个结点的孩子结
12、点次序不能任意颠倒。即每个孩子有左右之分。我们把位于左边的孩子叫做左孩子,位于右边的孩子叫做右孩子。第22页/共176页14 二月 2023第23页二叉树的五种基本形态:二叉树的五种基本形态:N空树空树只含根结点只含根结点NNNLRR右子树为空树右子树为空树L左子树为空树左子树为空树左右子左右子树均不树均不为空树为空树第23页/共176页14 二月 2023第24页二叉树的主要基本操作二叉树的主要基本操作:查查找找类类插插入入类类删删除除类类第24页/共176页14 二月 2023第25页 Root(T);Value(T,e);Parent(T,e);LeftChild(T,e);RightC
13、hild(T,e);LeftSibling(T,e);RightSibling(T,e);BiTreeEmpty(T);BiTreeDepth(T);PreOrderTraverse(T,Visit();InOrderTraverse(T,Visit();PostOrderTraverse(T,Visit();LevelOrderTraverse(T,Visit();查查找找类类第25页/共176页14 二月 2023第26页 InitBiTree(&T);Assign(T,&e,value);CreateBiTree(&T,definition);InsertChild(T,p,LR,c);
14、插插入入类类第26页/共176页14 二月 2023第27页ClearBiTree(&T);DestroyBiTree(&T);DeleteChild(T,p,LR);删删除除类类第27页/共176页14 二月 2023第28页二叉树二叉树的重要特性的重要特性第28页/共176页14 二月 2023第29页 性质性质 1:在二叉树的第 i 层上至多有2i-1 个结点。(i1)用归纳法证明用归纳法证明:归纳基归纳基:归纳假设:归纳假设:归纳证明:归纳证明:i=1 层时,只有一个根结点:2i-1=20=1;假设对所有的 j,1 j i,命题成立;二叉树上每个结点至多有两棵子树,则第 i 层的结点数
15、=2i-2 2=2i-1。第29页/共176页14 二月 2023第30页性质性质 2:深度为 k 的二叉树上至多含 2k-1 个结点(k1)。证明:证明:基于上一条性质,深度为 k 的二叉树上的结点数至多为 20+21+2k-1=2k-1。第30页/共176页14 二月 2023第31页 性质性质 3:对任何一棵二叉树,若它含有n0 个叶子结点、n2 个度为 2 的结点,则必存在关系式:n0=n2+1。证明:证明:设设 二叉树上结点总数 n=n0+n1+n2又又 二叉树上分支总数(即边数)b=n1+2n2 而 n=b+1=b=n-1=n0+n1+n2-1由此,由此,n0=n2+1。第31页/
16、共176页14 二月 2023第32页两类两类特殊特殊的二叉树:的二叉树:满二叉树满二叉树:指的是深度为k且含有2k-1个结点的二叉树。完全二叉树完全二叉树:树中所含的 n 个结点和满二叉树中编编号为号为1 至至n 的结的结点点一一对应。123456789 10 11 12 13 14 15abcdefghij满二叉树必为完全二叉树,而完全二叉树不一定是满二叉树。第32页/共176页14 二月 2023第33页性质性质4:具有 n 个结点的完全二叉树的深度深度为 log2n+1。证明:证明:设设完全二叉树的深度为 k 则根据第二条性质得 2k-1-1 n 2k 1或2k-1 n 2k 即 k-
17、1 log2 n k,log2 n n,则该结点无左孩子,否则,编号为 2i 的结点为其左孩子左孩子结点;(3)若 2i+1n,则该结点无右孩子结点,否则,编号为2i+1 的结点为其右孩子右孩子结点。第34页/共176页14 二月 2023第35页 可以用归纳法证明其中的(2)和(3):当i=1时,由完全二叉树的定义知,如果2i=2n,说明二叉树中存在两个或两个以上的结点,所以其左孩子存在且序号为2;反之,如果2n,说明二叉树中不存在序号为2的结点,其左孩子不存在。同理,如果2i+1=3n,说明其右孩子存在且序号为3;如果3n,则二叉树中不存在序号为3的结点,其右孩子不存在。假设对于序号为j(
18、1ji)的结点,当2jn时,其左孩子存在且序号为2j,当2jn时,其左孩子不存在;当2j+1n时,其右孩子存在且序号为2j+1,当2j+1n时,其右孩子不存在。第35页/共176页14 二月 2023第36页 当i=j+1时,根据完全二叉树的定义,若其左孩子存在,则其左孩子结点的序号一定等于序号为j的结点的右孩子的序号加1,即其左孩子结点的序号等于(2j+1)+1=2(j+1)=2i,且有2in;如果2in,则左孩子不存在。若右孩子结点存在,则其右孩子结点的序号应等于其左孩子结点的序号加1,即右孩子结点的序号为2i+1,且有2i+1n;如果2i+1n,则右孩子不存在。故(2)和(3)得证。第3
19、6页/共176页14 二月 2023第37页 由(2)和(3)我们可以很容易证明(1)。当i=1时,显然该结点为根结点,无双亲结点。当i1时,设序号为i的结点的双亲结点的序号为m,如果序号为i的结点是其双亲结点的左孩子,根据(2)有i=2m,即m=i/2;如果序号为i的结点是其双亲结点的右孩子,根据(3)有i=2m+1,即m=(i-1)/2=i/2-1/2,综合这两种情况,可以得到,当i1时,其双亲结点的序号等于 i/2。证毕。对完全二叉树,还有以下性质:(1)若结点j序号为奇数且不等于1,则它的左兄弟为j-1;(2)若结点j序号为偶数且不等于n,它的右兄弟为j+1;(3)结点j所在层数(层次
20、)为 log2j+1;第37页/共176页14 二月 2023第38页6.3二叉树的存储结构二叉树的存储结构二、二叉树的链式二、二叉树的链式 存储表示存储表示一、一、二叉树的顺序二叉树的顺序存储表示存储表示二叉树的结构是非线性的,每一结点最多可有两个后继。二叉树的存储结构有两种:顺序存储结构和链式存储结构。第38页/共176页14 二月 2023第39页#define MAX_TREE_SIZE 100 /二叉树的最大结点数typedefTElemType SqBiTreeMAX_ TREE_SIZE;/0号单元存储根结点SqBiTree bt;一、一、二叉树的顺序存储表示二叉树的顺序存储表示
21、第39页/共176页14 二月 2023第40页例如例如:ABCDEF A B D C E F 0 1 2 3 4 5 6 7 8 9 10 11 12 131401326将一棵二叉树按完全二叉树顺序存放到一个一维数组中,若该二叉树为非完全二叉树,则必须将相应位置空出来,使存放的结果符合完全二叉树形状。第40页/共176页14 二月 2023第41页二、二叉树的链式存储表示二、二叉树的链式存储表示1.1.二叉链表二叉链表2三叉链表三叉链表3 3双亲链表双亲链表4线索链表线索链表对于一棵二叉树,若采用顺序存贮时,当它为完全二叉树时,比较方便,若为非完全二叉树,将会浪费大量存贮存贮单元。最坏的非完
22、全二叉树是全部只有右分支,设高度为K,则需占用2K-1个存贮单元,而实际只需k个存储单元。因此,对于非完全二叉树,宜采用下面的链式存储结构。第41页/共176页14 二月 2023第42页ADEBCF rootlchild data rchild结点结构结点结构:1.1.二叉链表二叉链表第42页/共176页14 二月 2023第43页typedefstruct BiTNode /结点结构结点结构 TElemType data;struct BiTNode *lchild,*rchild;/左右孩子指针 BiTNode,*BiTree;lchild data rchild结点结构结点结构:C 语
23、言的类型描述如下语言的类型描述如下:第43页/共176页14 二月 2023第44页结论:若一个二叉树含有n个结点,则它的二叉链表中必含有2n个指针域,其中必有n1个空的链域。此结论证明如下:证明:分支数目B=n-1,即非空的链域有n-1个,故空链域有2n-(n-1)=n+1个。二叉链表的建立为了后面遍历二叉树方便,先介绍建立二叉链表的算法(假设datatype为char型)。根据遍历方法,可采用相应的递归方法建立二叉树,如教科书P131算法6.4采用先序递归建立二叉树。第44页/共176页14 二月 2023第45页Status CreateBiTree(BiTree&T)ch=getcha
24、r();if(ch=)T=NULL;else if(!(T=(BiTNode*)malloc(sizeof(BiTNode)exit(OVERFLOW);T-data=ch;/生成根结点 CreateBiTree(T-lchild);/构造左子树 CreateBiTree(T-rchild);/构造右子树 return OK;/CreateBiTree第45页/共176页14 二月 2023第46页AB C D A BCD上页算法执行过程举例如下:ATBCD第46页/共176页14 二月 2023第47页下面讨论用队列(按层次进队出队)实现二叉树的建立。假设二叉链表的数据类型描述如刚才所述,为
25、建立二叉链表,用一个一维数组来模拟队列,存放输入的结点,但是,输入结点时,必须按完全二叉树形式,才能使结点间满足性质5,若为非完全二叉树,则必须给定一些假想结点(虚结点),使之符合完全二叉树形式。为此,我们在输入结点值时,存在的结点则输入它对应的字符,不存在的结点(虚结点),输入逗号,最后以一个特殊符号“#”作为输入的结束,表示建二叉链表已完成。建成的二叉链表可以由根指针root唯一确定。第47页/共176页14 二月 2023第48页算法描述如下:#includetypedefcharDataType;typedefstructNodeDataTypedata;structNode*Lchi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 严蔚敏 课件
限制150内