数据结构单元4-树与二叉树课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构单元4-树与二叉树课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 单元 二叉 课件
- 资源描述:
-
1、国家教学资源库建设项目国家教学资源库建设项目单元单元4 4 树与二叉树树与二叉树2数据结构数据结构 教学目标教学目标【知识目标知识目标】l 理解树的逻辑结构和基本术语l 理解二叉树的递归定义,掌握二叉树的性质l 掌握二叉树的遍历,能确定遍历所得到的结点访问序列l 掌握二叉树的存储方法和二叉树的基本操作的算法l 掌握树和森林与二叉树之间的转换方法l 能根据给定的叶结点及其权值构造出相应的最优二叉树l 能根据最优二叉树构造对应的哈夫曼编码【能力目标能力目标】l 具有用树来描述现实世界、应用二叉树解决实际问题的能力l 具有恰当的选择二叉树作为数据的逻辑结构和存储结构的能力单元单元4 4 树与二叉树树
2、与二叉树3数据结构数据结构 引例描述引例描述文本文件的加密和解密文本文件的加密和解密 某公司有一份机密文件,是由英文字母(包括大小写)、英文逗号、英文句点、空格和回车换行等符号组成的文件名为Jimi.txt的文本文件。公司为保证文件不被泄密,要求技术人员将文件中的每个字符都用一个二进制位串进行加密,需要时能进行解密,但必须保证加密后的文件不要过大,且对加密的文件进行解密后与原文件必须完全一致。如果你是技术人员,你将如何按要求为公司的文件进行加密和解密呢?演示执行演示执行 单元单元4 4 树与二叉树树与二叉树4数据结构数据结构 一、树的递归定义一、树的递归定义 1.定义定义 树(Tree)是n(
3、n0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:有且仅有一个特定的称为根(Root)的结点;其余的结点可分为m(m0)个互不相交的有限子集Tl,T2,Tm,其中每个子集本身又是一棵树,并称其为根的子树(SubTree)。4.1 树的概念树的概念 知识储备知识储备单元单元4 4 树与二叉树树与二叉树5数据结构数据结构 2树的表示树的表示 树形图表示:结点用圆圈表示,结点名字写在圆圈旁或圆圈内,子树与其根之间用无向边来连接,如图4-1是树形图表示表示的树T1。嵌套集合表示法:用集合的包含关系描述树结构,如图4-2是树T1的嵌套集合表示。凹入表表示法:类似于书的目录。图图4-1 树
4、树T1的树形图表示的树形图表示ABCDEFIJGH图图4-2 树树T1的嵌套集合表示的嵌套集合表示EIJGHABDCF单元单元4 4 树与二叉树树与二叉树6数据结构数据结构 二、树结构的基本术语二、树结构的基本术语 1结点的度结点的度 结点的度:一个结点拥有子树的个数称为该结点的度。树的度:该树中结点的最大度数称为该树的度。叶子结点:度为零的结点称为叶子结点或终端结点。分支结点:度不为零的结点称分支结点或非终端结点。即除叶子结点外的结点均为分支结点。内部结点:除根结点之外的分支结点统称为内部结点。开始结点:根结点又称为开始结点。【示例示例】图4-1表示的树T1中结点A的度为3,其它结点的度都为
5、2或0。【示例示例】图4-1表示的树T1的度为3。【示例示例】图4-1表示的树T1中结点C、E、G、H、I、J都是叶子结点。【示例示例】图4-1表示的树T1中结点A、B、D、F都是分支结点。【示例示例】图4-1表示的树T1中结点A是开始结点。单元单元4 4 树与二叉树树与二叉树7数据结构数据结构 2结点之间的关系结点之间的关系孩子(Child)结点:树中某个结点的子树的根称为该结点的孩子结点。双亲(Parent)结点:孩子结点的根称为该结点的双亲。兄弟结点:同一个双亲的孩子互称为兄弟结点。堂兄弟:在后面介绍。祖先和子孙:在后面介绍。【示例示例】图4-1表示的树T1中结点B、C、D都是结点A的孩
6、子结点,结点E、F都是结点B的孩子结点,结点G、H都是结点D的孩子结点。【示例示例】图4-1表示的树T1中结点A是结点B、C、D的双亲结点,结点B是结点E、F的双亲结点,结点D是结点G、H的双亲结点。【示例示例】图4-1表示的树T1中结点B、C、D互为兄弟结点,结点E、F互为兄弟结点,而结点F和G非兄弟结点。单元单元4 4 树与二叉树树与二叉树8数据结构数据结构 3路径路径路径或道路:若树中存在一个结点序列k1,k2,kj,使得ki是ki+1的双亲(1ij),则称该结点序列是从kl到kj的一条路径或道路。路径的长度:指路径所经过的边的数目。注意:注意:若一个结点序列是路径,则在树的树形图表示中
7、,该结点序列“自上而下”地通过路径上的每条边。从树的根结点到树中其余结点均存在一条惟一的路径。祖先和子孙:若树中结点k到ks存在一条路径,则称k是ks的祖先,ks是k的子孙。一个结点的祖先是从根结点到该结点路径上所经过的所有结点,而一个结点的子孙则是以该结点为根的子树中的所有结点。约定:约定:结点k的祖先和子孙不包含结点k本身。【示例示例】图4-1表示的树T1中结点序列ABFI是结点A到I的一条路径,因为自上而下A是B的双亲,B是F的双亲,F是I的双亲。该路径的长度为3。而结点B和G之间不存在路径,因为既不能从B出发自上而下地经过若干个结点到达G,也不能从G出发自上而下地经过若干个结点到达B。
8、单元单元4 4 树与二叉树树与二叉树9数据结构数据结构 4结点的层数和树的深度结点的层数和树的深度结点的层数:根结点的层数为1,其余结点的层数等于其双亲结点的层数加1。堂兄弟:双亲在同一层的结点互为堂兄弟。树的深度:树中结点的最大层数称为树的深度。注意:要弄清结点的度、树的度和树的深度的区别。5有序树和无序树有序树和无序树若将树中每个结点的各子树看成是从左到右有次序的,则称该树为有序树;否则称为无序树。若不特别指明,一般讨论的树都是有序树。6森林(森林(Forest)森林是m(m0)棵互不相交的树的集合。删去一棵树的根,就得到一个森林;反之,加上一个结点作树根,森林就变为一棵树。单元单元4 4
9、 树与二叉树树与二叉树10数据结构数据结构 三、树型结构的逻辑特征三、树型结构的逻辑特征 1树中任一结点都可以有零个或多个直接后继结点,但至多只能有一个直接前驱结点。2树中只有根结点无前驱,它是开始结点;叶结点无后继,它们是终端结点。3祖先与子孙的关系是对父子关系的延拓,它定义了树中结点之间的纵向次序。4有序树中,同一组兄弟结点从左到右有长幼之分。对这一关系加以延拓,规定若k1和k2是兄弟,且k1在k2的左边,则kl的任一子孙都在k2的任一子孙的左边,那么就定义了树中结点之间的横向次序。树中结点之间的逻辑关系是“一对多”的关系,树是一种非线性的结构。单元单元4 4 树与二叉树树与二叉树11数据
10、结构数据结构【课堂实践【课堂实践4-1】已知在一棵度为3的树中,度为2的结点数为4,度为3的结点数为3,求该树中的叶子结点数。提示:分别从树的结点总数和树的孩子结点总数两个角度考虑。做做一一做做单元单元4 4 树与二叉树树与二叉树12数据结构数据结构 一、二叉树的定义一、二叉树的定义 1.二叉树的递归定义二叉树的递归定义 二叉树(Binary Tree)是n(n0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。2二叉树的五种基本形态二叉树的五种基本形态 二叉树可以是空集;可以有空的左子树或空的右子树;或者左、右子树皆为空。
11、二叉树的五种基本形态如图4-3。4.2 二叉树及其性质二叉树及其性质 图图4-3 二叉树的五种基本形态二叉树的五种基本形态(a)(b)(c)(d)(e)单元单元4 4 树与二叉树树与二叉树13数据结构数据结构 二、二、二叉树的性质二叉树的性质1性质性质性质1:二叉树第i层上的结点数目最多为2i-1(i1)个。性质2:深度为k的二叉树至多有2k-1(k1)个结点。性质3:在任意一棵非空二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。性质性质3说明:说明:在任意非空二叉树中叶子结点数总比度为2的结点数多1个。证明:证明:假设树非空,用数学归纳法证明。当i=1时,因为第1层
12、上只有一个根结点,而2i-1=20=1。所以命题成立。假设对所有的j(1j2k-1-1。另一方面,由性质2知:深度为k的二叉树至多有2k-1(k1)个结点,因此,n2k-1,即:2k-1-ln2k-1,由此可推出:2k-1n2k,取对数后有:k-1lgnk又因k-1和k是相邻的两个整数,故有。由此即得1lgn1)nlg(另外,由2k-1-ln2k-1得2k-11,则ki的双亲编号为i/2;若i=1,则ki是根结点,无双亲。(ii)若2in,则ki的左孩子的编号是2i;若2in,则ki无左孩子,因此也无右孩子,即ki必定是叶子。因此完全二叉树中编号in/2的结点必定是叶结点。(iii)若i为奇数
13、且不为1,则ki是结点ki/2的右孩子,ki的左兄弟的编号是i-1;若i=1或i为偶数,则ki无左兄弟。(iv)若i为偶数且小于n,则ki是结点ki/2的左孩子,ki的右兄弟的编号是i+1;若i=n或i为奇数,则ki无右兄弟。由此可知,完全二叉树中结点的编号序列,完全反映了结点之间的逻辑关系。单元单元4 4 树与二叉树树与二叉树19数据结构数据结构【课堂实践【课堂实践4-3】已知一棵完全二叉树含1000个结点,分别求该二叉树的度为2的结点数、度为1的结点数和叶子结点数。做做一一做做单元单元4 4 树与二叉树树与二叉树20数据结构数据结构(2)完全二叉树的顺序存储)完全二叉树的顺序存储 将完全二
14、叉树中所有结点按编号顺序依次存储在一个向量bt0n中。其中:bt1n用来存储结点,bt0不用或用来存储结点数目。说明:说明:完全二叉树的顺序存储结构既简单又节省存储空间;按这种方法存储的完全二叉树,向量元素bti的下标i就是对应结点的编号。【示例】【示例】图4-7所示的完全二叉树的顺序存储结构如图4-8。图图4-8 4-8 完全二叉树完全二叉树BT3BT3的顺序存储的顺序存储BT3BT3A AB BC CD DE EF FG GH HI IJ JK KL L1212下标下标0 01 12 23 34 45 56 67 78 89 9101011111212单元单元4 4 树与二叉树树与二叉树2
15、1数据结构数据结构 2一般二叉树的顺序存储一般二叉树的顺序存储(1)具体方法)具体方法将一般二叉树添上一些“虚结点”,使其成为完全二叉树;为了用结点在向量中的相对位置来表示结点之间的逻辑关系,按完全二叉树形式给结点编号;将结点按编号存入向量对应分量,其中“虚结点”用表示。(2)二叉树的顺序存储结构的优缺点:)二叉树的顺序存储结构的优缺点:优点是存储结构简单;缺点是可能浪费大量的存储空间。在最坏的情况下,一个深度为k的且只有k个结点的右单支树,需要2k-1个结点的存储空间,浪费了2k-1-k个存储空间。【示例】【示例】如图4-9的三个结点的添加上4个虚结点右单支树的存储结构如图4-10。图图4-
16、9 添加虚结点右单支树添加虚结点右单支树1BAC372456AB3C01234567下标下标bt图图4-10 右单支树的顺序存储结构右单支树的顺序存储结构单元单元4 4 树与二叉树树与二叉树22数据结构数据结构(3)二叉树顺序存储结构的描述)二叉树顺序存储结构的描述#define MAXSIZE 50 /设置二叉树的最大结点数typedef char DataType;/定义结点类型typedef struct/定义二叉树结构DataType btMAXSIZE;/存放二叉树的结点int num;/存放二叉树的结点数SeqBT;注:注:如果使用元素bt0存放二叉树的结点数,成员num可省略或不
17、定义结构而只定义数组。单元单元4 4 树与二叉树树与二叉树23数据结构数据结构 二二、二叉树的链式存储结构、二叉树的链式存储结构1结点的结构:结点的结构:二叉树的每个结点最多有两个孩子。用链接方式存储二叉树时,每个结点除了存储结点本身的数据外,还应设置两个指针域lchild和rchild,分别指向该结点的左孩子和右孩子。结点的结构如图4-11。2结点的类型描述结点的类型描述说明:说明:定义新类型BinTree为指向BinTNode类型结点的指针类型,用于定义指向根结点的指针。图图4-11 结点的结构结点的结构 lchild data rchildtypedef char DataType;/定
18、义结点数据域类型typedef struct node/定义结点结构DataType data;struct node*lchild,*rchild;/左右孩子指针BinTNode;/结点类型typedef BinTNode*BinTree;单元单元4 4 树与二叉树树与二叉树24数据结构数据结构 3二叉树的链式存储结构二叉树的链式存储结构二叉链表二叉链表 在一棵二叉树中,所有类型为BinTNode的结点,再加上一个指向开始结点(即根结点)的BinTree型头指针(即根指针)root,就构成了二叉树的链式存储结构,并将其称为二叉链表。说明:说明:一个二叉链表由根指针root惟一确定。若二叉树为
19、空,则root=NULL;若结点的某个孩子不存在,则相应的指针为空。具有n个结点的二叉链表中,共有2n个指针域。其中只有n-1个用来指示结点的左、右孩子,其余的n+1个指针域为空。证明:证明:因为二叉树中结点总数n等于0度结点数n0、1度结点数n1和2度结点数n2之和:n=n0+n1+n2 由二叉树的性质3:n0=n2+1,所以,n1+2n2=n-1。而在二叉链表中,度为1的结点有一个指针域不空,度为2的结点的两个指针域都不空,即n个结点的二叉链表中共有n1+2n2个指针域不空,即n-1个指针域不空,分别指向左右孩子。因此,其余的n+1个指针域为空。【示例示例】如图4-12的二叉树BT4的二叉
20、链表如图4-13。图图4-12 二叉树二叉树BT4ABCDEFGH图图4-13 二叉树二叉树BT4的二叉链表的二叉链表rootABFEDHGC单元单元4 4 树与二叉树树与二叉树25数据结构数据结构 4带双亲指针的二叉链表带双亲指针的二叉链表三叉链表三叉链表 经常要在二叉树中寻找某结点的双亲时,可在每个结点上再加一个指向其双亲的指针parent,形成一个带双亲指针的二叉链表,也称为三叉链表。【示例示例】如图4-12的二叉树BT4的三叉链表如图4-14。图图4-12 二叉树二叉树BT4ABCDEFGH图图4-14 二叉树二叉树BT4的三叉链表的三叉链表GHFECDBAroot单元单元4 4 树与
21、二叉树树与二叉树26数据结构数据结构【课堂实践【课堂实践4-4】画出如图4-15的二叉树BT5的二叉链表和三叉链表的存储结构。做做一一做做图图4-15 二叉树二叉树BT5ABCDEGFH单元单元4 4 树与二叉树树与二叉树27数据结构数据结构 遍历(遍历(Traversal):):是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。一、遍历方案一、遍历方案1遍历方案:遍历方案:由于一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:访问结点本身(N);遍历该结点的左子树(L);遍历该结点
22、的右子树(R)。以上三种操作有六种遍历方案:NLR、LNR、LRN、NRL、RNL、RLN。由于前三种次序与后三种次序对称,所以只讨论先左后右的前三种次序。4.4 二叉树的遍历二叉树的遍历 单元单元4 4 树与二叉树树与二叉树28数据结构数据结构 2三种遍历的命名三种遍历的命名前(先)序遍历NLR:访问结点的操作发生在遍历其左右子树之前,又称为先根遍历。中序遍历LNR:访问结点的操作发生在遍历其左右子树之中(间),又称为中根遍历。后序遍历LRN:访问结点的操作发生在遍历其左右子树之后,又称为后根遍历。3遍历规则及算法遍历规则及算法中序遍历的递归算法若二叉树非空,则依次执行如下操作:(i)遍历左
23、子树;(ii)访问根结点;(iii)遍历右子树。中序遍历的递归算法:void InOrder(BinTree T)if(T)/如果二叉树非空InOrder(T-lchild);/遍历左子树printf(%c,T-data)/访问根结点InOrder(T-rchild);/遍历右子树 单元单元4 4 树与二叉树树与二叉树29数据结构数据结构 先序遍历的递归算法若二叉树非空,则依次执行如下操作:(i)访问根结点;(ii)遍历左子树;(iii)遍历右子树。先序遍历的递归算法:后序遍历得递归算法若二叉树非空,则依次执行如下操作:(i)遍历左子树;(ii)遍历右子树;(iii)访问根结点。后序遍历的递归
24、算法:void PreOrder(BinTree T)if(T)/如果二叉树非空printf(c,T-data);/访问根结点PreOrder(T-lchild);/遍历左子树PreOrder(T-rchild);/遍历右子树 void PostOrder(BinTree T)if(T)/如果二叉树非空 PostOrder(T-lchild);/遍历左子树PostOrder(T-rchild);/遍历右子树printf(c,T-data);/访问根结点 单元单元4 4 树与二叉树树与二叉树30数据结构数据结构 一、遍历序列一、遍历序列1中序序列:中序序列:中序遍历二叉树时,按对结点的访问次序形
25、成的结点序列称为中序序列。说明:说明:在中序遍历序列中,根结点左边的结点在根的左子树上,根结点右边的结点在根的右子树上。2先序序列:先序序列:先序遍历二叉树时,按对结点的访问次序形成的结点序列称为先序序列。说明:说明:在先序遍历序列中,最左边的结点是根结点。3后序序列:后序序列:后序遍历二叉树时,按对结点的访问次序形成的结点序列称为后序序列。说明:说明:在后序遍历序列中,最右边的结点是根结点。【示例示例】对如图4-12的二叉树BT4,求出它的中序遍历、先序遍历和后序遍历序列。单元单元4 4 树与二叉树树与二叉树31数据结构数据结构【课堂实践【课堂实践4-5】写出如图4-15的二叉树T2的先序遍
展开阅读全文