树和二叉树-数据结构课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《树和二叉树-数据结构课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 数据结构 课件
- 资源描述:
-
1、树和二叉树-数据结构本章学习要点本章学习要点z掌握树和二叉树的性质,相关术语及基本概念。二叉树的两种存储方法,重点是链式存储据。二叉树三种顺序遍历及其递归实现算法。二叉树的层次遍历创建链式存储的二叉树的算法。中序线索二叉树的算法:中序线索二叉树上基本算法(遍历、求指定结点的前驱和后继、查找指定值的结点)。树的遍历算法(先根遍历、后根遍历);森林的遍历算法(前序遍历,后序遍历)哈夫曼树的概念;哈夫曼树的构造算法;哈夫曼编码通过本章的算法的学习,让学生认识到递归定义的数据结构之下求解相应问题,思路清晰和简洁算法设计方法是采用递归的方式。z理解二叉树三种遍历的非递归算法及其与栈的关系在中序线索树指定
2、结点下插入新结点的算法,学会在复杂情形下分类讨论的方法。树的三种存储结构(双亲表示法、孩子表示法、孩子兄弟表示法)及各自的特点(优点、缺点)1.掌握树、森林和对应的二叉树相互转换算法。本章作业本章作业z6.3 6.5 6.7 6.12 z6.13 6.19 6.21 6.27 z6.29 6.42 6.43 本章教学重点和难点本章教学重点和难点z教学重点二叉树的性质;二叉树的链式存储。二叉树三种顺序遍历算法,遍历算法的应用。中序线索二叉树的算法及其简单应用。哈夫曼树的构造和编码算法注意程序实现方法教学难点二叉树性质的运用二叉树三种遍历的非递归算法。中序线索二叉树的理解及先序后序线索算法的实现。
3、1.二叉树中,学会递归的思想求解问题,用遍历的典型算法解决一些具体问题。第第6章树和二叉树章树和二叉树z树型结构是一类重要的非线性非线性数据结构。其中常见的是树树和二叉树二叉树树是以分支关系定义的层次结构z树结构在客观世界中广泛存在人类社会的族谱社会组织结构z在计算机领域编译程序中表示源程序的语法结构数据库中是信息的重要组织形式之一操作系统中的进程管理z本章主要讨论二叉树的存储及各种操作研究树和森林与二叉树的转换关系树的应用6.1树的定义和基本术语树的定义和基本术语z树(tree)是n(n0)个结点的有限集。z在任意一颗非空树中有且仅有一个特定的称为根(root)的结点;当n1时,其余结点可分
4、为m(m0)个互不相交互不相交的有限集T1,T2,Tm,其中每一个集合本身又是一颗树,并且称为根的子树子树(SubTree)。z特点没有结点的树称为空树树中各子树是互不相交的树的示例树的示例A只有根结点的树ABCDEFGHIJKLM有子树的树根根子树子树抽象数据类型树的定义抽象数据类型树的定义ADT Tree 数据对象D:D是具有相同特性的数据元素的集合。数据关系R:若D为空集,则称为空树若D仅含一个数据元素,则R为空集,否则R=H,H是如下二元关系:(1)在D中存在唯一的称为根的数据元素root,它在关系H下无前驱;(2)若D-root,则存在D-root的一个划分,D1,D2,Dm(m0)
5、,对任意jk(1j,km)有DjDk=,且对任意的i(1im),唯一存在数据元素xiDi,有H。(3)对应于D-root的划分,H-,有唯一的一个划分H1,H2,Hm(m0),对任意jk(1j,km)有DjDk=,且对任意的i(1im),Hi是D上的二元关系,(Di,Hi)是一颗符合本定义的树,称为根root的子树 基本操作InitTree(&T)DestroyTree(&T)CreateTree(&T,definition)ClearTree(&T)TreeEmpty(T)TreeDepth(T);Root(T)Value(T,cur_e);Assign(T,cur_e,value)Pare
6、nt(T,cur_e)LeftChild(T,cur_e)RightChild(T,cur_e)InsertTree(&T,&p,I,c)DeleteTree(&T,&p,i)TraverseTree(T,visit()/ADT Tree基本术语基本术语z结点(node)包括一个数据元素及若干指向其子树的分支z结点的度(degree)结点拥有的子树数z叶子(leaf)或终端结点度为0的结点z非终端结点或分支结点度不为0的结点z内部结点除根结点外的分支结点z树的度树中各结点度的最大值z孩子(child)结点的子树的根称为该结点的孩子z双亲(parents)孩子结点的上层结点叫该结点的双亲z兄弟(
7、sibling)同一个双亲的孩子互为兄弟z祖先从根结点到该结点所经分支上的所有结点z子孙以某结点为根的子树中的任一结点称为根的子孙z结点的层次(level)从根结点算起,根为第一层,它的孩子为第二层z堂兄弟双亲在同一层的结点互为堂兄弟z深度(depth)或高度树中结点的最大层次数z有序树树中结点的子树从左到右是有序的第一孩子有序树中最左的子树的根最后孩子有序树中最右的子树的根z无序树树中结点的子树没有前后次序z森林(forest)m(m0)棵互不相交的树的集合术语示例术语示例ABCDEFGHIJKLM结点A的度:3结点B的度:2结点M的度:0叶子:K,L,F,G,M,I,J结点A的孩子:B,C
8、,D结点B的孩子:E,F结点I的双亲:D结点L的双亲:E结点B,C,D为兄弟结点K,L为兄弟结点A的层次:1结点M的层次:4树的深度:4结点F,G为堂兄弟结点A是结点F,G的祖先6.2二叉树(二叉树(BinaryTree)z定义:二叉树是n(n0)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成z特点每个结点至多有二棵子树(即不存在度大于2的结点)二叉树的子树有左、右之分,且其次序不能任意颠倒z基本形态A只有根结点的二叉树空二叉树AB右子树为空AB左子树为空ABC左、右子树均非空抽象数据类型二叉树的定义抽象数据类型二叉树的定义ADT Bin
9、aryTree数据对象D:D是具有相同特性的数据元素的集合。数据关系R:若D为空集,则称为空树若D仅含一个数据元素,则R为空集,否则R=H,H是如下二元关系:(1)在D中存在唯一的称为根的数据元素root,它在关系H下无前驱;(2)若D-root,则存在D-root=Dl,Dr,且DlDr=;(3)若Dl,则D1中存在唯一的元素xl,H,且存在Dl上的关系HlH;若Dr,则Dr中存在唯一的元素xr,H,且存在Dr上的关系HrH;H=,Hl,Hr;(4)(Dl,Hl)是一颗符合本定义的二叉树,称为根的左子树;(Dr,Hr)是一颗符合本定义的二叉树,称为根的右子树;基本操作InitBiTree(&
10、T)DestroyBiTree(&T)CreateBiTree(&T,definition)ClearBiTree(&T)BiTreeEmpty(T)BiTreeDepth(T);Root(T)Value(T,cur_e);Assign(T,cur_e,value)Parent(T,cur_e)LeftChild(T,cur_e)RightChild(T,cur_e)LeftBibling(T,e)RightSibling(T,e)InsertChild(T,p,LR,c)DeleteChild(T,p,LR,c)ProOrderTraverse(T,Visit()/先序遍历二叉树先序遍历二叉
11、树InOrderTraverse(T,Visit()/中序遍历二叉树中序遍历二叉树PostOrderTraverse(T,Visit()/后序遍历二叉树后序遍历二叉树LevelOrderTraverse(T,Visit()/层次遍历二叉树层次遍历二叉树/ADT BinaryTree二叉树的性质(性质二叉树的性质(性质1)z在二叉树的第i层上至多有2i-1个结点(i1)。z归纳法证明i=1时,只有一个根结点,显然21-1=20=1,成立。假设对于所有的j,1=ji成立,即第j层最多2j-1个结点。那么可以证明j=i时成立。由归纳假设:第i-1层上至多2(i-1)-1个结点。由于二叉树的每个结点的
12、度最多为2,故在第i层上的最大结点数为第i-1层上最大结点数的2倍,即2x2(i-1)-1=2i-1。证明完毕1231145897101415二叉树的性质(性质二叉树的性质(性质2)z深度为k的二叉树至多有2k-1个结点(k1)z证明由性质1可见,深度为k的二叉树的最大结点数为122)i(kk1ik1i1i层上的最大结点数第二叉树的性质(性质二叉树的性质(性质3)z对任何一颗二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1z证明设n1为二叉树T中度为1的结点数因为二叉树中所有结点的度均小于或等于2,则n=n0+n1+n2(1)分析分支数的关系,除了根结点外,其余结点都有
13、且只有一个分支进入。设B为分支总数,则n=B+1由于这些分支都是由度为1或2的结点发出的,故B=n1+2n2于是:n=n1+2n2+1(2)由(1)和(2)得n0=n2+1z证毕几种特殊形式的二叉树几种特殊形式的二叉树z满二叉树定义:一颗深度为k且有2k-1个结点的二叉树称为满二叉树,特点:每一层上的结点数都是最大结点数z完全二叉树定义:深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称为完全二叉树特点叶子结点只可能在层次最大的两层上出现对任一结点,若其右分支下子孙的最大层次为i,则其左分支下子孙的最大层次必为i 或i+1123114589
14、1213671014151231145891267101234567123456完全二叉树示例完全二叉树示例二叉树的性质(性质二叉树的性质(性质4)z具有n个结点的完全二叉树的深度为z证明假设深度为k,则根据性质2和完全二叉树的定义有于是k-1log2n1,则其双亲PARENT(i)是结点 。如果2in,则结点i无左孩子(结点i为叶子结点);否则其左孩子LCHILD(i)是结点2i。如果2i+1n,则结点i无右孩子(结点i为叶子结点);否则其右孩子RCHILD(i)是结点2i+1。1log2n1log2n2/i二叉树的存储结构二叉树的存储结构顺序存储结构顺序存储结构z存储顺序存储结构实现:按满
15、二叉树的结点层次编号,依次存放二叉树中的数据元素特点:结点间关系蕴含在其存储位置中浪费空间,适于存满二叉树和完全二叉树z#define MAX_TREE_SIZE 100 /二叉树的最大结点数z typedef TElemType SqBiTreeMAX_TREE_SIZE;/0号单元存储根结点zSqBiTree btabcdefga b c d e 0 0 0 0 f g1 2 3 4 5 6 7 8 9 10 11二叉树的存储结构二叉树的存储结构二叉链表二叉链表z二叉链表typedef struct BiTNodeTElemTypedata;struct BiTNode*lchild,*r
16、child;BiTNode,*BiTreeABCDEFG在在n个结点的二叉链表中,有个结点的二叉链表中,有n+1个空指针域个空指针域lchild data rchild AB C D E F G二叉树的二叉链表存储表示二叉树的二叉链表存储表示z-二叉树的二叉链表存储表示-ztypedef struct BiTNodez TElemTypedata;z struct BiTNode*lchild,*rchild;/左右孩子指针zBiTNode,*BiTree;z-基本操作的函数原型说明-zstatus CreateBiTree(Bitree&T)zStatus PreOrderTraverse(
17、BiTree T,Status(*visit)(TElemType e)zStatus InOrderTraverse(BiTree T,Status(*visit)(TElemType e)zStatus PostOrderTraverse(BiTree T,Status(*visit)(TElemType e)zStatus LevelOrderTraverse(BiTree T,Status(*visit)(TElemType e)二叉树的存储结构二叉树的存储结构三叉链表三叉链表z三叉链表typedef struct TNodeTElemTypedata;struct TNode*lch
18、ild,*rchild,*parent;TNode,*TTreelchild data parent rchildABCDEFG A B C D E F G二叉树存储方式的比较二叉树存储方式的比较z在不同的存储结构中,实现二叉树的操作方法不同z具体应用中根据二叉树的形态结合操作采用合适的存储结构InitBiTree(&T)DestroyBiTree(&T)CreateBiTree(&T,definition)ClearBiTree(&T)BiTreeEmpty(T)BiTreeDepth(T)Root(T)Value(T,cur_e)Assign(T,cur_e,value)Parent(T,
19、cur_e)LeftChild(T,cur_e)RightChild(T,cur_e)LeftBibling(T,e)RightSibling(T,e)InsertChild(T,p,LR,c)DeleteChild(T,p,LR,c)ProOrderTraverse(T,Visit()InOrderTraverse(T,Visit()PostOrderTraverse(T,Visit()LevelOrderTraverse(T,Visit()例题例题 选择题选择题 1/5z1.下面关于二叉树的结论正确的是A二叉树中,度为O的结点个数等于度为2的结点个数加1。B二叉树中结点个数必大于O。C完全
20、二叉树中,任何一个结点的度,或者为O,或者为2。D二叉树的度是2。z分析:该题主要考查二叉树逻辑结构的特点。正确答案为A。二叉树中结点个数可以为O,称为空树,所以B错。满二叉树中,任何一个结点的度,或者为O,或者为2。完全二叉树中,任何一个结点的度,或者为O,或者为1,或者为2。所以C错。二叉树的度可以是O、1、2。所以D错。例题例题 选择题选择题 2/5z2.一棵三叉树中,已知度为3的结点数等于度为2的结点数,且树中叶结点的数目为13,则度为2的结点数目A.4B.2C.3D.5z分析:该题主要考查多叉树逻辑结构的特点。正确答案为A。例题例题 选择题选择题 3/5z3.对一个满二叉树,m个树枝
21、,n个结点,深度为h,则A.n=h+mB.h+m=2nC.m=h-1D.n=2h-1z分析:该题主要考查满二叉树的定义正确答案为D。例题例题 选择题选择题 4/5z4.一棵有n个结点的k叉树,树中所有结点的度之和为A.n-1B.knC.n2D.2nz分析:该题要考查树的结点和度之间的关系由树的度的定义可知结点的度即为与之相连的子结点的个数,只有根结点不是连在其他结点上,所以和为n-1。答案为A。例题例题 选择题选择题 5/5z5.将含有150个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根结点的编号为1,则编号为69的结点的双亲结点的编号为A.33B.34C.35D.36
22、z分析:该题主要考查完全二叉树的逻辑结构由二叉树的性质5可知,结点69的双亲结点编号为69/234。所以答案为B。例题例题 判断题判断题 1/1z1.完全二叉树中,若一个结点没有左孩子,则它必然是叶子结点。z正确z分析:该题口主要考查完全二叉树的逻辑结构。深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1到n的结点一一对应时,称为完全二叉树。根据此定义,若完全二叉树中某结点无左孩子,则其必定没有右孩子,因此是叶结点。所以这种说法是正确的例题例题 填空题填空题 1/4z1.一棵高度为H的满K叉树,按层次从1开始编号,则;z(1)第i层结点的数为()z(2)编号为
23、n的结点的父结点的编号为()z(3)编号为n的结点的第i个孩子的编号为()z(4)编号为n的结点有右兄弟的条件是(),右兄弟的编号为()z分析:该题主要考查对二叉树定义和性质的理解。z kn/)1(ki-1k(n-1)+1+ikknn/)1(n+1例题例题 填空题填空题 2/4z2.如果某二叉树中有 30 个叶结点,另有 30 个结点仅有一个孩子结点,则该二叉树中共有()个结点。z分析:该题口主要考查二叉树结点之间的关系。设 i、j、k 分别为二叉树中度为 O、1、2 的结点数则 n=i+j+k。根据二叉树的性质,i=k+1,有 n=i+j+i-1=30+30+30-1=89,所以二叉树中有个
24、 89 结点。89例题例题 填空题填空题 3/4z3.n个结点的完全二叉树,编号最大的非叶结点是()号结点,编号最小的叶结点是()号结点。z分析:该题主要考查完全二叉树的结构。n个结点的完全二叉树,编号最大的叶结点就是n号结点,它的双亲结点就是编号最大的非叶结点。根据完全二叉树的性质,n的双亲为n/2。编号最大的非叶结点的右边一个结点,即n/21号结点,是编号最小的叶结点。n/2n/21例题例题 应用题应用题 4/4z4.设一棵度为 k 的树中有 n1个度为 1 的结点,n2个度为 2 的结点,nk个度为k的结点,求该树上有多少叶子结点?z分析与解答:该题主要考查树的基本概念和结构。根据两个等
25、式:求结点总数:n=n0+n1+nk求树枝总数:n-1=n1+2n2+knk因此,n0=1+0n1+1n2+(k-1)nkn0习题习题一、选择题z1.设树T的度为4,其中度为1,2,3,4的结点个数分别为4,2,1,1。则树T中叶子数为()A.5B.6C.7D.8z2.由4个结点可以构造出多少种不同的二叉树?()A.10B.12C.14D.16z3.一颗二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()。A.9B.11C.15D.不确定二、填空题z1.已知二叉树有50个叶子结点,则该二叉树的总结点数至少是(99)。z2.在一颗二叉树中,度为0的结点的个数为n0,度为2的结
展开阅读全文