第六章 树与二叉树.ppt
《第六章 树与二叉树.ppt》由会员分享,可在线阅读,更多相关《第六章 树与二叉树.ppt(147页珍藏版)》请在三一办公上搜索。
1、学习提示,基本内容 二叉树的定义、性质和存储结构;二叉树的遍历和线索化以及遍历算法的各种描述形式;树和森林的定义、存储结构与二叉树的转换、遍历;树的多种应用。教学目的1、熟练掌握二叉树的结构特性,了解相应的证明方法。2、熟悉二叉树的各种存储结构的特点及适用范围。3、遍历二叉树、线索二叉树。4、熟练掌握二叉树的线索化过程及在中序线索化树上找给定结点的前驱和后继的方法。5、熟悉树的各种存储结构及其特点,掌握树和森林与二叉树的转换方法。6、了解最优树的特性,掌握建立最优树和赫夫曼编码的方法。教学重点:树与二叉树的概念和基本术语、存储结构、二叉树性质、二叉树遍历、树与二叉树的转换、赫夫曼编码设计教学难
2、点:线索二叉树、树与二叉树遍历非递归算法的实现、树的基本操作的实现、赫夫曼树及其应用,学习纲要,6.1 树的定义和基本概念6.2 二叉树(本课程的重点内容之一)6.2.1 二叉树的定义和基本术语 6.2.2 二叉树的性质 6.2.3 二叉树的存储结构6.3 遍历二叉树和线索二叉树 6.3.1 遍历二叉树 6.3.2 线索二叉树6.4 树和森林 6.4.1 树的存储结构 6.4.2 森林与二叉树的转换,6.4.3树和森林的遍历6.5 赫夫曼树及其应用 6.5.1 最优二叉树(赫夫曼树)6.5.2 赫夫曼编码,学习纲要,树型结构是一类重要的非线性结构。树型结构是结点之间有分支,并且具有层次关系的结
3、构。(直观来看)树型结构的逻辑特征树中任一结点都可以有零个或多个后继结点,但至多只能有一个前趋结点,只有根结点无前趋,叶子结点无后继。最为常用的树型结构树二叉树,6.1 树的定义和基本术语,6.1 树的基本概念及相关术语一、树的定义 定义:树(Tree)是n(n=0)个结点的有限集T,n=0时称为空树,否则对任意一棵非空树,它满足如下两个条件:,6.1 树的定义和基本术语,(1)有且仅有一个特定的称为根(Root)的结点;(2)其余的结点可分为m(m0)个互不相交的子集T1,T2,T3Tm,其中每个子集又是一棵树,并称其为根的子树(Subtree)。,树的定义是采用递归方法,6.1 树的定义和
4、基本术语,(a)一棵树结构(b)一个非树结构(c)一个非树结构,一、树的定义,6.1 树的定义和基本术语,树的应用举例文件结构,6.1 树的定义和基本术语,每棵子树的根结点有且仅有一个直接前驱,但可以有0个或多个直接后继。是一种分支的、层次的结构,二、树的特点,6.1 树的定义和基本术语,三、树的基本术语,结点的度:结点所拥有的子树的个数。树的度:树中各结点度的最大值。,6.1 树的定义和基本术语,三、树的基本术语,叶子结点:度为0的结点,也称为终端结点。分支结点:度不为0的结点,也称为非终端结点。,6.1 树的定义和基本术语,三、树的基本术语,孩子、双亲:树中某结点子树的根结点称为这个结点的
5、孩子结点,这个结点称为它孩子结点的双亲结点;兄弟:具有同一个双亲的孩子结点互称为兄弟。,6.1 树的定义和基本术语,三、树的基本术语,路径:如果树的结点序列n1,n2,nk有如下关系:结点ni是ni+1的双亲(1=ik),则把n1,n2,nk称为一条由n1至nk的路径;路径上经过的边的个数称为路径长度。,6.1 树的定义和基本术语,三、树的基本术语,祖先、子孙:在树中,如果有一条路径从结点x到结点y,那么x就称为y的祖先,而y称为x的子孙。,6.1 树的定义和基本术语,三、树的基本术语,结点所在层数:根结点的层数为1;对其余任何结点,若某结点在第k层,则其孩子结点在第k+1层。树的深度:树中所
6、有结点的最大层数,也称高度。,6.1 树的定义和基本术语,三、树的基本术语,层序编号:将树中结点按照从上层到下层、同层从左到右的次序依次给他们编以从1开始的连续自然数。,6.1 树的定义和基本术语,三、树的基本术语,有序树、无序树:如果一棵树中结点的各子树从左到右是有次序的,称这棵树为有序树;反之,称为无序树。,数据结构中讨论的一般都是有序树,6.1 树的定义和基本术语,三、树的基本术语,森林:m(m0)棵互不相交的树的集合。,6.1 树的定义和基本术语,练习:对如下的树,回答以下问题:,根结点、叶结点G的双亲、G的孩子E的子孙、E的兄弟C的兄弟结点B、I的层次对结点G为根的子树的深度树的深度
7、树的度数,四、树的其它表现形式a、广义表法b、嵌套集合法c、凹入表示法,(A(B)(E(K,L),F),C(G),D(H(M),I,J),(a),(b),(c),6.1 树的定义和基本术语,五、树结构和线性结构的比较,线性结构,树结构,无前驱,无双亲,无后继,无孩子,一个前驱,一个后继,一个双亲,多个孩子,一对一 一对多,6.2 二叉树,6.2.1 二叉树的定义一、定义二叉树是n(n=0)个结点的有限集合,此集合或者为空集(n=0),或者由一个根结点及两棵互不相交的左右子树组成,并且左右子树都是二叉树。,6.2 二叉树,二、二叉树的特点1.每个结点至多只有二棵子树(即二叉树中不存在度大于2的结
8、点);2.该两棵子树可以为空;3.该两棵子树有次序之分,分别称之为左子树和右子树,其次序不能任意颠倒。,6.2 二叉树,二叉树的五种不同形态,三、二叉树的基本形态,6.2 二叉树,四、二叉树与树和有序树的区别,6.2 二叉树,二叉树与树的区别:A树中结点的最大度数没有限制,二叉树结点最大度数为2。B树的每个结点的子树无左、右之分,二叉树的结点子树有明确的左、右之分。二叉树与有序树的区别:C.在有序树中,某个结点只有一个孩子时就无左、右之分,特别要注意:二叉树不是树的特殊情况,它们是两种不同的树型结构。,四、二叉树与树和有序树的区别,练习:画出含有3个结点的树与二叉树的所有不同形态,树,二叉树,
9、6.2 二叉树,6.2 二叉树,特殊的二叉树,斜树1.所有结点都只有左子树的二叉树称为左斜树2.所有结点都只有右子树的二叉树称为右斜树3.左斜树和右斜树统称为斜树。,1.在斜树中,每一层只有一个结点;2.斜树的结点个数与其深度相同。,斜树的特点:,满二叉树:一棵深度为k且有2k-1个结点的二叉树称为满二叉树。,特点:,6.2 二叉树,特殊的二叉树,叶子只能出现在最下一层;只有度为0和度为2的结点。,6.2 二叉树,特殊的二叉树,不是满二叉树,虽然所有分支结点都有左右子树,但叶子不在同一层上。,满二叉树在同样深度的二叉树中结点个数最多满二叉树在同样深度的二叉树中叶子结点个数最多,6.2 二叉树,
10、完全二叉树-深度为k的,有n个结点的二叉树,当且仅当每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称为完全二叉树(也称为近似满二叉树),完全二叉树,特点:(1)叶子结点只可能在层次最大的两层上出现(2)对任一结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙最大层次必为L或L+1,特殊的二叉树,(a)完全二叉树,(b)非完全二叉树,(c)非完全二叉树,满二叉树是完全二叉树的特例。,6.2 二叉树,特殊的二叉树,由此可得出如下结论:对一棵完全二叉树,有:1.至多只有最下面两层上结点的度数可以小于22.最下面一层结点都集中在该层的最左边3.满二叉树是完全二叉树,反之不然,在
11、完全二叉树中,若某个结点没有左孩子,则它一定没有右孩子,即该结点必是叶结点。,6.2 二叉树,特殊的二叉树,6.2.2 二叉树的性质,性质1:在二叉树的第i层上至多有2i-1个结点(i=1)。,第三层上(i=3),有23-1=4个结点。第四层上(i=4),有24-1=8个结点。,用数学归纳法证明,6.2.2 二叉树的性质,性质2:深度为k的二叉树至多有2k1个结点(k=1)).,此树的深度h=4,共有24-1=15个结点。,20+21+22+2k-1=2k-1,6.2.2 二叉树的性质,性质3:对任何一棵二叉树,如果其终端结点数为n0,度为2的结点数为n2,则n0n21。,n0=8n2=7,6
12、.2.2 二叉树的性质,性质4:具有n个结点的完全二叉树的深度为 符号 表示不大于x的最大整数。,完全二叉树的两个重要特性,6.2.2 二叉树的性质,性质5:如果对一棵有n个结点的完全二叉树的结点按层次编号,则对编号为i的结点(11,则其双亲是结点i/2。(2)如果2in,则结点i为叶子结点,无左孩子;否则,其左孩子是结点2i。(3)如果2i1n,则结点i无右孩子 否则,其右孩子是结点2i1。,完全二叉树的两个重要特性,性质5表明,在完全二叉树中,结点的层序编号反映了结点之间的逻辑关系。,6.2.2 二叉树的性质,完全二叉树中结点i和i+1,(a)i和i+1结点在同一层,(b)i和i+1结点不
13、在同一层,如图所示为完全二叉树上结点及其左右子树在结点之间的关系。,6.2.2 二叉树的性质,在此过程中,可以从(2)和(3)推出(1),所以先证明(2)和(3)。对于i1,由完全二叉树的定义,其左孩子是结点2,若2n,即不存在结点2,此是,结点i无孩子。结点i的右孩子也只能是结点3,若结点3不存在,即3n,此时结点i无右孩子。对于i1,可分为两种情况:(1)设第j(1n,则无左孩子:,6.2.2 二叉树的性质,其右孩子必定为第j1层的第二个结点,编号为2i1。若2i+1n,则无右孩子。(2)假设第j(11时,如果i为左孩子,即2(i/2)=i,则i/2是i的双亲;如果i为右孩子,i2p+1,
14、i的双亲应为p,p(i1)/2=i/2.证毕。,6.2.3 二叉树的存储结构,顺序存储结构,二叉树的顺序存储结构就是用一组连续的存储单元存储二叉树中的结点,并且结点的存储位置(下标)应能体现结点之间的逻辑关系父子关系。,如何利用数组下标来反映结点之间的逻辑关系?,完全二叉树和满二叉树中结点的序号可以惟一地反映出结点之间的逻辑关系。,6.2.3 二叉树的存储结构,完全二叉树的顺序存储,以编号为下标,完全二叉树,6.2.3 二叉树的存储结构,二叉树的顺序存储,以编号为下标,按照完全二叉树编号,一般二叉树,6.2.3 二叉树的存储结构,一棵斜树的顺序存储会怎样呢?,深度为k的右斜树,k个结点需分配2
15、k1个存储单元。,一棵二叉树改造后成完全二叉树形态,需增加很多空结点,造成存储空间的浪费。,二叉树的顺序存储结构一般仅存储完全二叉树,6.2.3 二叉树的存储结构,二叉链表,基本思想:令二叉树的每个结点对应一个链表结点,链表结点除了存放与二叉树结点有关的数据信息外,还要设置指示左右孩子的指针。,二叉树的链表表示,每个结点由数据域、左指针域和右指针域组成。,二叉链表,其中,data:数据域,存放该结点的数据信息;lchild:左指针域,存放指向左孩子的指针;rchild:右指针域,存放指向右孩子的指针。,结点结构,6.2.3 二叉树的存储结构,二叉链表,具有n个结点的二叉链表中,有多少个空指针?
16、,n+1个,6.2.3 二叉树的存储结构,在二叉链表中,如何求某结点的双亲?,二叉链表,6.2.3 二叉树的存储结构,三叉链表,三叉链表,在二叉链表的基础上增加了一个指向双亲的指针域。,6.2.3 二叉树的存储结构,三叉链表,6.2.3 二叉树的存储结构,在二叉链表这种存储结构上,二叉树的多数基本运算如求根、求左、右孩子等很容易实现。但求双亲运算的实现比较麻烦,而且其时间性能较低空间利用不高,在含有n个结点的二叉链表中有n+1个空链域,三叉链表优点:求双亲运算很容易实现,且时间性能很好,二叉链表与三叉链表的比较,二叉树的二叉链表存储结构类型描述,typedef struct BiTNode/树
17、结点定义 ElemType data;/结点数据域 struct BiTNode*lChild,*rChild;/左右孩子指针 BiTNode,*BiTree;,6.2.4 二叉树的常用操作,二叉树存储结构课堂练习,练习分别画出下图所示二叉树的二叉链表、三叉链表和顺序存储结构示意图,6.3 遍历二叉树和线索二叉树,6.3.1遍历二叉树,二叉树的遍历是指从根结点出发,按照某种次序访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次。,二叉树遍历操作的结果?,6.3.1遍历二叉树,6.3 遍历二叉树和线索二叉树,考虑二叉树的组成:,二叉树的遍历方式:DLR、LDR、LRD、DRL、RDL、
18、RLD,如果限定先左后右,则二叉树遍历方式有三种:先序:DLR中序:LDR后序:LRD,层序遍历:按二叉树的层序编号的次序访问各结点。,6.3.1遍历二叉树,先序遍历二叉树算法的框架是:若二叉树为空,则空操作;否则访问根结点(D);先序遍历左子树(L);先序遍历右子树(R)。遍历结果-+a*b-c d/e f,.(前缀表示波兰式),先序遍历(Preorder Traversal),6.3.1遍历二叉树,void PreOrder(BiTNode*T)if(T=NULL)return error;/递归调用的结束条件 visit(T-data);PreOrder(T-lChild);PreOrd
19、er(T-rChild);,二叉树递归的先序遍历算法,6.3.1遍历二叉树,中序遍历二叉树算法的框架是:若二叉树为空,则空操作;否则中序遍历左子树(L);访问根结点(D);中序遍历右子树(R)。遍历结果 a+b*c-d-e/f,.(中缀表示),中序遍历(Inorder Traversal),6.3.1遍历二叉树,void InOrder(BiTNode*T)if(T!=NULL)InOrder(T-lChild);visit(T-data);InOrder(T-rChild);,二叉树递归的中序遍历算法,6.3.1遍历二叉树,后序遍历二叉树算法的框架是:若二叉树为空,则空操作;否则后序遍历左子
20、树(L);后序遍历右子树(R);访问根结点(D)。遍历结果 a b c d-*+e f/-,.(后缀表示逆波兰式),后序遍历(Postorder Traversal),6.3.1遍历二叉树,void PostOrder(BiTNode*T)if(T!=NULL)PostOrder(T-lChild);PostOrder(T-rChild);visit(T-data);,二叉树递归的后序遍历算法,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,先序序列:A B D E H I C F G,中序序列:D B H E I A F C G,后序序列:D H I
21、E B F G C A,3,3,3,3,3,6.3.1遍历二叉树,6.3.1遍历二叉树,写出下图二叉树的先序、中序、后序的遍历序列,先序序列:A B C D E F G H I J,中序序列:B C D A F E H J I G,后序序列:D C B F J I H G E A,课堂练习二,6.3.1遍历二叉树,层序遍历二叉树的层次遍历是指从二叉树的第一层(即根结点)开始,从上至下逐层遍历,在同一层中,则按从左到右的顺序对结点逐个访问。,遍历结果:-+/a*e f b c d,6.3.1遍历二叉树,若已知一棵二叉树的先序(或中序,或后序,或层序)序列,能否惟一确定这棵二叉树呢?,遍历的性质性
22、质1、由一棵二叉树的先序序列和中序序列可惟一确定这棵二叉树性质2、由一棵二叉树的后序序列和中序序列可惟一确定这棵二叉树,由遍历序列恢复二叉树,6.3.1遍历二叉树,例如,已知一棵二叉树的中序序列和后序序列分别为BDCEAFHG和DECBHGFA,试画出这棵二叉树。,构造二叉树过程如下:,BDCE,FHG,A,FHG,A,B,DCE,由遍历序列恢复二叉树,由遍历序列恢复二叉树,中序序列BDCEAFHG 后序序列DECBHGFA,6.3.1遍历二叉树,6.3.1遍历二叉树,已知二叉树的先序序列 ABHFDECKG 和中序序列 HBDFAEKCG,试构造该二叉树,练习三,6.3.1遍历二叉树,先序序
23、列 ABHFDECKG 和中序序列 HBDFAEKCG,构造二叉树过程如下:,HBDF,EKCG,A,EKCG,A,B,H,DF,6.3.1遍历二叉树,KCG,EKCG,A,B,H,DF,EKCG,A,B,H,F,D,E,A,B,H,F,D,E,A,B,H,F,D,C,K,G,先序序列 ABHFDECKG,6.3.1遍历二叉树,int Height(BiTNode*T)if(T=NULL)return 0;else int m=Height(T-lChild);int n=Height(T-rChild);return(m n)?m+1:n+1;,例一:求二叉树高度的递归算法,二叉树遍历应用,
24、Status CreateBiTree(BiTree,例二:构建一棵二叉树(使用先序遍历),6.3.1遍历二叉树,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,先序序列:A B D E H I C F G,中序序列:D B H E I A F C G,后序序列:D H I E B F G C A,3,3,3,3,3,6.3.2二叉树遍历的非递归实现,6.3.2二叉树遍历的非递归实现,先序遍历的定义:1)访问根结点2)先序遍历左子树3)先序遍历右子树,先序遍历的非递归算法,(a),(b),6.3.2二叉树遍历的非递归实现,利用栈的先序遍历的非递归算法,先
25、序遍历的定义:1)访问根结点2)先序遍历左子树3)先序遍历右子树,c,dc,c,访问a进栈c左进b,访问b进栈d左进空,退栈d访问d左进空,退栈c访问c左进e,访问e左进空退栈,结束,先序遍历的非递归算法,6.3.2二叉树遍历的非递归实现,void PreOrder(BiTree T)stack S;InitStack(/左子树空,进右子树,先序遍历的非递归算法,6.3.2二叉树遍历的非递归实现,a,b,c,d,e,ba,a,da,a,左空,退栈访问,左空,退栈访问,退栈访问,左空,ec,退栈访问,c,c,右空,退栈访问 栈空结束,利用栈的中序遍历的非递归算法,中序遍历的定义:1)中序遍历左子
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六章 树与二叉树 第六 二叉
链接地址:https://www.31ppt.com/p-4984604.html