期末复习-树、图、查找、排序.ppt
《期末复习-树、图、查找、排序.ppt》由会员分享,可在线阅读,更多相关《期末复习-树、图、查找、排序.ppt(212页珍藏版)》请在三一办公上搜索。
1、期末复习树、图、查找、排序,树:是 n(n0)个结点的有限集合。如果该集合为空,称为空树。在任意一棵非空树中:,树的定义,有且仅有一个特定的称为根结点(root)的结点;2)其他结点可分为若干个互不相交的子集,而且每一个子集本身又是一棵树,称为根的子树。,递归定义,结点:,结点的度:,树的度:,叶子结点:,分支结点:,数据元素+若干指向子树的分支,结点分支的个数,即子树的数目如:A的度-3;B的度-2;K的度-0;,树中所有结点的度的最大值 如:树的度为3;,度为零的结点,也称终端结点如例:K,L,F,G,M,I,J为终端结点,度大于零的结点如例:A,B,C,D,E,基本术语,森林:是 m(m
2、0)棵互不相交的树的集合,A,root,F,线性结构,树型结构,第一个数据元素(无前驱),根结点(无前驱),最后一个数据元素(无后继),多个叶子结点(无后继),其它数据元素(一个前驱、一个后继),其它数据元素(一个前驱、多个后继),7.2 二叉树,二叉树或为空树;或是由一个根结点加上两棵分别称为左和右子树的、互不交的二叉树组成。,根结点,左子树,右子树,E,F,特点:1)每个结点最多只有两棵子树;2)两颗子树有左右之分,顺序不能换。,二叉树的五种基本形态:,N,空树,只含根结点,N,N,N,L,R,R,右子树为空树,L,左子树为空树,左右子树均不为空树,特殊的二叉树:满二叉树,满二叉树:指的是
3、深度为k且含有2k-1个结点的二叉树。,深度为3,节点数=23-1=7,深度为4,节点数=24-1=15,特点:1)每一层上的结点数都是最大结点数;2)叶子结点都在最后一层。,完全二叉树:树中所含的 n 个结点和满二叉树中编号为 1 至 n 的结点一一对应。,特点:1)除了最下一层外其余各层都是满的;2)最下一层的结点都集中在该层的左侧。,特殊的二叉树:完全二叉树,性质 1:满二叉树的第 i 层上有2i-1 个结点(i1),用归纳法证明:归纳基:归纳假设:归纳证明:,i=1 时,只有一个根结点,2i-1=20=1;,假设第j层有2j-1结点,命题成立;,第j层的每个结点都有2个结点,则第(j+
4、1)层上的结点数=2*2j-1=2j=2(j+1)-1。,二叉树的性质,性质 1的推论:在二叉树的第 i 层上至多有2i-1 个结点(i1)。,性质 2:深度为 k 的满二叉树共有 2k-1 个结点(k1)。,证明:,基于上一条性质,深度为 k 的满二叉树上的结点数为:20+21+2k-1=2k-1,性质 2的推论:深度为 k 的二叉树上最多有 2k-1 个结点(k1),性质 3:设二叉树叶子结点数为n0,度为 2 的结点数为n2,则必存在关系式:n0=n2+1。,性质4:具有 n 个结点的完全二叉树的深度为 log2n+1,性质 5:对于具有n个结点的完全二叉树,如果按照从上到下和从左至右的
5、顺序对二叉树中的所有结点从 1 至 n进行编号,则对于任意的序号为 i 的结点,有:若 i1,则序号为i的结点的双亲结点的序号为i/2;如果i=1,则该结点是根,无双亲;若 2in 则该结点无左孩子;若 2i+1n,则序号为i的结点无右孩子结点。,二叉树的存储结构,二、二叉树的链式存储表示,一、二叉树的顺序存储表示,用一组连续的存储单元存储二叉树的数据元素,以结点存储的相对位置表示结点之间的关系。为了正确地反映结点之间的关系,任何二叉树都必须按照完全二叉树的形式来存储.这种存储方式对某些二叉树的存储会造成存储空间的浪费。,顺序存储结构,在高级语言中,可以用一维数组来描述这种顺序存储结构。例如:
6、,完全二叉树的顺序存储,一般二叉树的存储,NOTES:代表空元素,#define MAX_TREE_SIZE 100/二叉树的最大结点数TElemType SqBiTreeMAX_TREE_SIZE;/1号单元存储根结点,例如:,练习:,1已知一棵完全二叉树有64个叶子结点,则该树可能达到的最大深度为()A7B8 C9D102若一棵二叉树有11个叶子结点,则该二叉树中度为2的结点个数是()A10B11 C12D不确定的已知一棵二叉树的顺序存储序列为:aebfcd,则:1)e的左孩子是哪个结点?右孩子是哪个结点?2)d的双亲是哪个结点?,答案:B答案:A答案:1)没有左孩子;右孩子是f;2)b;
7、,练习:,3假设一棵二叉树的顺序存储结构如图所示,请回答下列问题:(1)哪个结点是根结点?(2)哪些结点是叶子结点?(3)哪些结点是H的祖先?(4)哪些结点是B的兄弟?(5)树的深度是多少?,AD,HA,C,EC4,二、二叉树的链式存储表示,1.二叉链表,2三叉链表,二叉链结构 每个结点包含三个域:数据域和左右指针域,如下表所示,root,二叉链表,struct BTNode datatype data;struct BTNode*lchild,*rchild;Typedef BTNode*BTree;将二叉树类型BTree定义为指向二叉链表结点结构的指针类型。,结点结构:,C 语言的类型描述
8、如下:,三叉链表 三叉链表结构:每个结点除包含数据域和左右指针域外,还包含一个指向其双亲结点的指针域。,root,struct TriTNode/结点结构 datatype data;struct TriTNode*lchild,*rchild;/左右孩子指针 struct TriTNode*parent;/双亲指针 typedef TriTNode*TriTree;,结点结构:,C 语言的类型描述如下:,在这两种结构中,只需要给出指向根结点的指针,即可访问树中任意一个结点.,尽管在二叉表中无法由结点直接找到其双亲,但由于二叉链表的结构灵活,操作方便,对于一般情况下的二叉树,甚至比顺序存储结构
9、还节省空间。因此二叉链表是最常用的二叉树存储方式。今后,我们所涉及到的二叉树,如不加特别说明均采用二叉链表存储。,说明,二叉树的遍历,遍历二叉树是指按照一定的规律对二叉树中的每个结点,访问且仅访问一次的处理过程。,“访问”的含义可以很广,如:求结点的度、层次、输出结点的信息等等。,“遍历”是任何类型均有的操作,1)对线性结构而言,只有一条搜索路径(因为每个结点均只有一个后继),故不需要另加讨论。2)而二叉树是非线性结构,每个结点有两个后继,则存在如何遍历即按什么样的搜索路径进行遍历的问题。,对“二叉树”而言,可以把二叉树看成由三个基本单元组成:根结点(D)、左子树(L)、右子树(R),并且规定
10、左子树上的所有结点应该在右子树上的所有结点之前被访问,由此可以得到三种遍历顺序:先序遍历(DLR)、中序遍历(LDR)、后序遍历(LRD),先序的遍历算法,中序的遍历算法,后序的遍历算法,遍历算法,若二叉树为空树,则空操作;否则,(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。,先序的遍历算法:,先序遍历:,A B D E G C F,若二叉树为空树,则空操作;否则,(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。,中序的遍历算法:,中序遍历:,D B G E A C F,若二叉树为空树,则空操作;否则,(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。
11、,后序的遍历算法:,后序遍历:,D G E B F C A,先序遍历:,中序遍历:,后序遍历:,A B D G C E H F,B G D A H E C F,G D B H E F C A,例题,中序遍历:,先序遍历:,后序遍历:,a+b*c d e/f,-+a*b c d/e f,a b c d-*+e f/-,例题,(),根据遍历序列画二叉树,由一棵二叉树的先序序列和中序序列或中序和后序能够唯一确定一棵二叉树。,先序序列:A B C D E F G H I 中序序列:B C A E D G H F I,练习,已知一棵二叉树的先序序列和中序序列,请画出该二叉树。,先序序列:A B C D
12、E F G H I J 中序序列:C B E D F A H G J I,树和森林,树的存储结构,一、双亲表示法,二、孩子链表表示法,三、树的二叉链表(孩子-兄弟)存储表示法,树的双亲表示法,以一组连续空间(数组)存储树的结点,同时在每个结点中附设一个指示器指示其双亲结点在数组中的位置.,typedef struct datatype data;int parent;Node;typedef Node Tree MAX_NODE_NUM,#define MAX_NODE_NUM 100,C语言的类型描述:,孩子表示法,存储每个结点及其孩子信息。每个结点的所有孩子结点形成该结点的孩子链表。,孩子
13、链表,孩子-兄弟表示法,struct TreeNode datatype data;struct TreeNode*children;struct TreeNode*next;typedef struct Tree;,C语言的类型描述:,结点结构:,每个结点除其信息域外,再增加两个分别指向该结点的第一个孩子结点和下一个兄弟结点的指针。,孩子-兄弟表示法,树、森林与二叉树之间的转换,将树转换成二叉树的方法加线:在兄弟之间加一连线抹线:对每个结点,除了其左孩子外,去除其与其余孩子之间的关系旋转:以树的根结点为轴心,将整树顺时针转45,树转换成的二叉树其右子树一定为空,将二叉树转换成树加线:若p结点
14、是双亲结点的左孩子,则将p的右孩子,右孩子的右孩子,沿分支找到的所有右孩子,都与p的双亲用线连起来抹线:抹掉原二叉树中双亲与右孩子之间的连线调整:将结点按层次排列,形成树结构,树的先序遍历和后序遍历可以借用二叉树的先序遍历和中序遍历的算法来实现。,先序序列:ABEFGCDHI后序序列:EFGBCHIDA,先序序列:ABEFGCDHI中序序列:EFGBCHIDA后序序列:GFEIHDCBA,树,二叉树,森林转换成二叉树将各棵树分别转换成二叉树将每棵树的根结点用线相连以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树型结构,二叉树转换成森林抹线:将二叉树中根结点与其右孩子连线,
15、及沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成孤立的二叉树还原:将孤立的二叉树还原成树,由此,树和森林的各种操作均可与二叉树的各种操作相对应。,应当注意的是,和树对应的二叉树,其左、右子树的概念已改变为:左是孩子,右是兄弟,把下面的树转化成二叉树。,A,B,C,D,E,F,G,H,I,练习,K,L,J,哈夫曼树与哈夫曼编码,相关概念,树的路径长度定义为:树中每个结点的路径长度之和。,结点的路径长度定义为:从根结点到该结点的路径上分支的数目。,树的带权路径长度定义为:树中所有叶子结点的带权路径长度之和 WPL(T)=wklk(对所有叶子结点),结点的带权路径长度定义为:从根结点到该结点的路
16、径长度与结点上权的乘积。,设:a,b,c,d 的权值为:a=7,b=5,c=2,d=4;下面三棵不同的树的带权路径长度为:(7+5+4+2)*2=36(7+5)*3+4*2+2=46 7+5*2+(2+4)*3=35 第3棵树的带权路径长度最小。,最优二叉树:设有n个权值w1,w2,w3,.,wn,构造有n个叶子结点的二叉树,每个叶子结点带权为wi,则其中带权路径长度WPL最小的二叉树称为最优二叉树(赫夫曼树).赫夫曼树的应用:判定问题。例:将学生的百分制变成五级分制:设学生的成绩分布在五个等级上是不均匀的。,二、如何构造最优树,赫夫曼算法:(1)根据给定的n个权值w1,w2,w3,.,wn构
17、成n棵二叉树的集合F=T1,T2,T3,.,Tn,其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树均为空.(2)在集合F中选取两棵根结点权值最小的树作为左右子树构造一棵新的二叉树,新二叉树的根结点的权值为其左右子树上根结点的权值之和.(3)在集合F中删除这两棵树,同时将新得到的二叉树加入F中.(4)重复步骤(2)、(3),直到F中只含一棵树为止,这棵树就是一棵赫夫曼树.,9,例如:已知权值 W=5,6,2,9,7,5,6,2,7,5,2,7,6,9,7,6,7,13,9,9,16,29,0,0,0,0,1,1,1,1,00,01,11,100,101,(1)根据给定的n个权值w1,w
18、2,w3,.,wn构成n棵二叉树的集合F=T1,T2,T3,.,Tn,其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树均为空.,(2)在集合F中选取两棵根结点权值最小的树作为左右子树构造一棵新的二叉树,新二叉树的根结点的权值为其左右子树上根结点的权值之和.,(3)在集合F中删除这两棵树,同时将新得到的二叉树加入F中.(4)重复步骤(2)、(3),直到F中只含一棵树为止,这棵树就是一棵赫夫曼树.,哈夫曼编码 通信中的信息传递问题:在传递信息时,如何在能够识别的前提下,使传递的字符数最少。例:电报中的报文“ABACCDA”四个字符的编码问题。两位编码:00 01 10 11 如果用不同长
19、度的编码:例用 0 1 00 01前缀编码:对于不等长编码,若任一个字符的编码都不是另一个字符的编码的前缀,则这种编码称为前缀编码.前缀编码使得字符编码的平均长度最短.赫夫曼编码是一种前缀编码.赫夫曼编码的方法:(1)把字符出现的频率作为权值,根据这些权值构造一棵赫夫曼树.(2)约定在赫夫曼树中,左分支表示字符0,右分支表示字符1,则从根结点到叶子结点的路径上的分支字符组成的字符串即为该叶子结点字符的编码.,已知某系统在通信联系中只可能出现8种字符:abcdefgh,其概率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试据此构造哈夫曼树,要求:1)画出构
20、造哈夫曼树的过程;2)求每个字符的哈夫曼编码。,例题,哈夫曼编码:a:0110b:10c:1110d:1111,e:110f:00g:0111h:010,设权值序列为8,5,3,4,7,据此构造一棵哈夫曼树。画出构造哈夫曼树过程。,练习,习 题 一,1.假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为 个。A15 B16 C17 D472.深度为5的二叉树至多有_个结点。A.16 B.32 C.31 D.103.对一个满二叉树,m个树叶,n个结点,深度为h,则_。A.n=h+m B.h+m=2n C.m=h-1 D.n=2 h-1,答案:B C D,二叉树的前序遍历
21、序列中,任意一个结点均处在其子女结点的前面,这种说法_。A.正确 B.错误5.某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是_。A.bdgcefha B.gdbecfha C.bdgaechf D.gdbehfca6.在一非空二叉树的中序遍历序列中,根结点的右边_。A.只有右子树上的所有结点 B.只有右子树上的部分结点 C.只有左子树上的部分结点 D.只有左子树上的所有结点,答案:A D A,7.树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。这里,我们把由树转化得到的二
22、叉树叫做这棵数对应的二叉树。结论_是正确的。A.树的先根遍历序列与其对应的二叉树的先序遍历序列相同 B.树的后根遍历序列与其对应的二叉树的后序遍历序列相同 C.树的先根遍历序列与其对应的二叉树的中序遍历序列相同 D.以上都不对,答案:A,8.有一棵树如图所示,回答下面的问题:这棵树的根结点是_;这棵树的叶子结点是_;结点k3的度是_;这棵树的度是_;这棵树的深度是_;结点k3的子女是_;结点k3的父结点是_;,k1,k7,k5,k2,k4,k6,k3,1.k1 k2,k5,k7,k4 2 3 4 k5,k6 k1,9.一棵二叉树的结点数据采用顺序存储结构,存储于数组t中,如图所示,则该二叉树的
23、链接表示形式为_ _。,10.深度为k的完全二叉树至少有_个结点。至多有_个结点,若按自上而下,从左到右次序给结点编号(从1开始),则编号最小的叶子结点的编号是_。,2 k-1、2 k-1、2 k-1,11.根据二叉树的定义,具有三个结点的二叉树有5种不同的形态,请将它们分别画出。假设一棵 二叉树的先序序列为EBADCFHGIKJ和中序序列为ABCDEFGHIJK。请画出该树。,以数据集4,5,6,7,10,12,18为结点权值,画出构造Huffman树的每一步图示,计算其带权路径长度为。假设用于通讯的电文仅有八个字母(a,b,c,d,e,f,g,h)组成,字母在电文中出现的频率分别为0.07
24、,0.19,0.02,0.06,0.32,0.03,0.21,0.10。试为这八个字母设计哈夫曼编码。,习题二,1.三个结点的二叉树的基本形态有 种,三个结点的树的基本形态有 种。2一棵具有64个结点的完全二叉树的高度为。3.设一棵二叉树的先序遍历序列为ABCDFEGH,中序遍历序列为BAFDCGEH,请完成下列要求:1)画出该二叉树;2)写出该二叉树的后序遍历序列;3)将该二叉树转换成森林;,习题,4.已知一棵二叉树的顺序存储结构如下图所示,图中“0”表示不存在的结点,1)画出该二叉树;2)求该二叉树的先序遍历序列和中序遍历序列;3)将该二叉树转换成一棵树。5.设字符集为A,B,C,D,E,
25、其对应的权值为7,5,2,4,9,据此构造哈夫曼树,要求:1)画出构造哈夫曼树过程;2)求每个字符的哈夫曼编码;,本章复习要点,1、树的基本概念;结点、结点的度、树的度、叶子结点、分支结点、路径、孩子、双亲、结点的层次、树的深度、兄弟、堂兄弟2、二叉树的基本概念:二叉树、满二叉树、完全二叉树;3、二叉树的5个性质;4、具有3个结点的二叉树的5种形态;3个结点的树的2种的形态;5、理解二叉树的顺序存储结构;根据二叉树的顺序存储结构画二叉树;6、二叉树的先序、中序和后序遍历;根据先序和中序遍历的序列画二叉树;7、构造哈夫曼树,写出哈夫曼编码;8、树、森林、二叉树的互相转换;,1.B 2.B 3.C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 期末 复习 查找 排序

链接地址:https://www.31ppt.com/p-6051219.html