《叉树与树》PPT课件.ppt





《《叉树与树》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《叉树与树》PPT课件.ppt(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第五章 二 叉 树与树n n树树形形结结构构是是一一种种十十分分重重要要的的数数据据结结构构。本本章讨论的二叉树、树和树林都属于树形结构。章讨论的二叉树、树和树林都属于树形结构。n n在在树树形形结结构构中中每每个个结结点点最最多多只只有有一一个个前前驱驱,但可有多个后继的结构。但可有多个后继的结构。n n它它们们的的共共同同之之处处是是都都表表示示了了一一种种具具有有层层次次的分支关系。的分支关系。5.1 二叉树及其抽象数据类型二叉树及其抽象数据类型 基本概念n n二二二二叉叉叉叉树树树树可可以以定定义义为为结结点点的的有有限限集集合合,这这个个集集合合或或者者为为空空集集,或或者者由由一一
2、个个根根及及两两棵棵不不相相交交的的分分别别称称作作这这个个根根的的左左左左子子子子树树树树和和右右右右子树子树子树子树的二叉树组成。的二叉树组成。n n二二叉叉树树的的定定义义是是个个递递归归定定义义。二二叉叉树树可可以以是是个个空空集集合合,这这时时的的二二叉叉树树称称为为空空空空二二二二叉叉叉叉树树树树。二二叉叉树树也也可可以以是是只只有有一一个个结结点点的的集集合,这个结点只能是根;它的左子树和右子树均是空二叉树。合,这个结点只能是根;它的左子树和右子树均是空二叉树。n n二二叉叉树树描描述述的的是是一一种种层层次次关关系系,除除了了根根节节点点外外其其余余节节点点都都有有且只有一个前
3、驱节点,所有节点可以有且只有一个前驱节点,所有节点可以有0 0到两个后继节点。到两个后继节点。n n二叉树的五种基本形态二叉树的五种基本形态二叉树的相关术语n n父父父父结结结结点点点点、左左左左(右右右右)子子子子结结结结点点点点、边边边边:若若节节点点x x是是根根节节点点,y y是是x x的的左左(右右)子子树树的的根根,则则称称x x是是y y的的父父节节点点,y y是是x x的的左左(右右)子子节点,有序对节点,有序对称作称作x x到到y y的边。的边。n n兄弟兄弟兄弟兄弟:具有同一个父节点的节点彼此称为兄弟。:具有同一个父节点的节点彼此称为兄弟。n n祖祖祖祖先先先先、子子子子孙
4、孙孙孙:若若节节点点y y在在以以节节点点x x为为根根的的左左(右右)子子树树中中,且且xyxy,则称,则称x x是是y y的祖先,的祖先,y y是是x x的子孙。的子孙。n n路路路路径径径径、路路路路径径径径长长长长度度度度:如如果果x x是是y y的的祖祖先先,又又有有x=xx=x0 0,x,x1 1,x,xn n=y=y满满足足x xi i为为x xi+1i+1的的父父节节点点,称称x x0 0,x,x1 1,x,xn n为为从从x x到到y y的的一一条条路路径径,n n称为路径长度。称为路径长度。n n结结结结点点点点的的的的层层层层数数数数:根根的的层层数数为为1 1,其其余余
5、节节点点的的层层数数等等于于其其父父节节点点的措施加的措施加1 1。n n结结结结点点点点的的的的度度度度数数数数:节节点点的的非非空空子子树树的的个个数数称称作作节节点点的的度度数数。二二叉叉树中节点的最大度数为树中节点的最大度数为2 2。n n二叉树的高度二叉树的高度二叉树的高度二叉树的高度:二叉树中结点的最大层数称为二叉树的高度。:二叉树中结点的最大层数称为二叉树的高度。n n树树树树叶叶叶叶、分分分分支支支支结结结结点点点点:左左(右右)子子树树均均为为空空二二叉叉树树的的节节点点称称作作树树叶;否则称为分支节点。叶;否则称为分支节点。特殊的二叉树特殊的二叉树n n满二叉树满二叉树满二
6、叉树满二叉树:如果一棵二叉树的任何结点或者是树叶,或有两棵:如果一棵二叉树的任何结点或者是树叶,或有两棵非空子树,则此二叉树称作满二叉树(离散数学中称此树是正非空子树,则此二叉树称作满二叉树(离散数学中称此树是正则的则的)。n n完全二叉树完全二叉树完全二叉树完全二叉树:如果一棵二叉树至多只有最下面的两层结点度数:如果一棵二叉树至多只有最下面的两层结点度数可以小于可以小于2 2,其余各层结点度数都必须为,其余各层结点度数都必须为2 2,并且最下面一层的,并且最下面一层的结点都集中在该层最左边的若干位置上,则此二叉树称为完全结点都集中在该层最左边的若干位置上,则此二叉树称为完全二叉树。二叉树。n
7、 n完全二叉树不一定是满二叉树。满二叉树不一定是完全二叉树。完全二叉树不一定是满二叉树。满二叉树不一定是完全二叉树。n n扩扩扩扩充充充充的的的的二二二二叉叉叉叉树树树树:把把原原二二叉叉树树的的结结点点都都变变为为度度数数为为2 2的的分分支支结结点点,也也就就是是说说,如如果果原原结结点点的的度度数数为为2 2,则则不不变变,度度数数为为1 1,则增加一个分支,度数为则增加一个分支,度数为0 0(树叶),则增加两个分支。(树叶),则增加两个分支。n n新新增增加加的的结结点点(树树叶叶结结点点)都都用用小小方方框框表表示示,称称为为外外外外部部部部结结结结点点点点,树中原有的结点称为树中原
8、有的结点称为内部结点内部结点内部结点内部结点。n n由由 非非 空空 二二 叉叉 树树 扩扩 充充 的的 二二 叉叉 树树 都都 是是 满满 二二 叉叉 树树。把把空空二二叉叉树树扩扩充充得得到到的的扩扩充充二二叉叉树树规规定定为为只只有有一一个个外外部部结结点点组成的二叉树。组成的二叉树。n n在在扩扩充充的的二二叉叉树树中中,外外外外部部部部路路路路径径径径长长长长度度度度E E定定义义为为在在扩扩充充的的二二叉叉树树中中从从根根到到每每个个外外部部结结点点的的路路径径长长度度之之和和。内内内内部部部部路路路路径径径径长长长长度度度度I I定定义义为为在在扩扩充充的的二二叉叉树树中中从从根
9、根到到每每个内部结点的路径长度之和。个内部结点的路径长度之和。n n如在图的扩充二叉树中:如在图的扩充二叉树中:E=2+2+4+4+3+3+3=21E=2+2+4+4+3+3+3=21I=0+1+1+2+2+3=9I=0+1+1+2+2+3=95.1.2 主要性质n n性性性性质质质质1 1 在在非非空空二二叉叉树树的的i i层层上上至至多多有有2 2i i个个结结点点(i0)(i0)。证明:用归纳法来证。证明:用归纳法来证。n n性质性质性质性质2 2 高度为高度为k k的二叉树中最多有的二叉树中最多有2 2k+1k+1-1-1个结点个结点(k0)(k0)。证明:假设第证明:假设第i i层上
10、的最大结点个数是层上的最大结点个数是mmi i,由性质,由性质1 1可知,深度为可知,深度为k k的二叉树中最大结点个数的二叉树中最大结点个数MM为为:n n性性性性质质质质3 3 对对于任何一棵非空的二叉于任何一棵非空的二叉树树,如果叶,如果叶结结点个数点个数为为n n0 0,度度为为2 2的的结结点个数点个数为为n n2 2,则则有:有:n n0 0=n=n2 2+1 +1。证证明:明:设设一棵非空二叉一棵非空二叉树树中有中有n n个个结结点,度点,度为为1 1的的结结点个数点个数为为n n1 1,因,因为为二叉二叉树树中所有中所有结结点的度均不大于点的度均不大于2 2,所以,所以 n=n
11、n=n0 0+n+n1 1+n+n2 2 (1)(1)在二叉在二叉树树中,除根中,除根结结点外,其余每个点外,其余每个结结点都有一个分支点都有一个分支进进入,入,假假设设B B为为分支分支总总数,数,则则有有B=n 1 (2)B=n 1 (2)又由于二叉又由于二叉树树中的分支都是由度中的分支都是由度为为1 1和和2 2的的结结点点发发出,所以有出,所以有B=nB=n1 1+2n+2n2 2 (3)(3)综综合合(1)(1)、(2)(2)、(3)(3)式可得式可得 n n0 0=n=n2 2+1+1。n n性性性性质质质质4 4 具有具有n n个个结结点的完全二叉点的完全二叉树树的深度的深度k
12、k为为 。证证明:根据性明:根据性质质2 2和完全二叉和完全二叉树树的定的定义义可知可知2 2k k-1 -1 n 2 n 2k+1k+1 1 1即:即:2 2k k n n 2 2k+1k+1 对对不等式取不等式取对对数有:数有:k k k+1 k+1由于由于k k为为整数,所以有整数,所以有 k=k=n n性性性性质质质质5 5 对对于于具具有有n n个个结结点点的的完完全全二二叉叉树树,如如果果按按照照从从上上(根根结结点点)到到下下(叶叶结结点点)和和从从左左到到右右的的顺顺序序对对二二叉叉树树中中的的所所有有结结点从点从0 0开始到开始到n-1n-1进行编号,则对于任意的下标为进行编
13、号,则对于任意的下标为i i的结点,有:的结点,有:n n如如果果i=0i=0,则则它它是是根根结结点点,它它没没有有父父结结点点:如如果果i i0 0,则则它它的父结点的下标为的父结点的下标为(i-1)/2(i-1)/2;n n如如果果2i 2i1n1n1 1,则则下下标标为为i i的的结结点点的的左左子子结结点点的的下下标标为为2i 2i1 1;否则,下标为;否则,下标为i i的结点没有左子结点:的结点没有左子结点:n n如如果果2i+2n2i+2n1 1,则则下下标标为为i i的的结结点点的的右右子子结结点点的的下下标标为为2i+22i+2;否则,下标为;否则,下标为i i的结点没有右子
14、结点。的结点没有右子结点。n n性质性质性质性质6 6 在满二叉树中,叶结点的个数比分支结点个数多在满二叉树中,叶结点的个数比分支结点个数多1 1。n n性性性性质质质质7 7 扩充二叉树中,外部结点的个数比内部结点的个数多扩充二叉树中,外部结点的个数比内部结点的个数多1 1。n n性性性性质质质质8 8 对对任任意意扩扩充充二二叉叉树树,外外部部路路径径长长度度E E和和内内部部路路径径长长度度I I之之间满足以下关系:间满足以下关系:E=I+2nE=I+2n,其中,其中n n是内部结点个数。是内部结点个数。5.1.3 二叉树的抽象数据类型ADT BinTree isoperations B
15、inTree createEmptyBinTree(void)BinTree createEmptyBinTree(void)创建一棵空的二叉树。创建一棵空的二叉树。BinTree consBinTree(BinTreeNode root,BinTree left,BinTree right)BinTree consBinTree(BinTreeNode root,BinTree left,BinTree right)返回一棵二叉树,其根结点是返回一棵二叉树,其根结点是rootroot,左右二叉树分别为,左右二叉树分别为leftleft和和rightright。int isNull(BinTr
16、ee t)int isNull(BinTree t)判断二叉树判断二叉树t t是否为空。是否为空。BinTreeNode root(BinTree t)BinTreeNode root(BinTree t)返回二叉树返回二叉树t t的根结点。若为空二叉树,则返回一特殊值。的根结点。若为空二叉树,则返回一特殊值。BinTreeNode parent(BinTree t,BinTreeNode p)BinTreeNode parent(BinTree t,BinTreeNode p)返回结点返回结点p p的父结点。当指定的结点为根时,返回一个特殊值。的父结点。当指定的结点为根时,返回一个特殊值。B
17、inTree leftChild(BinTree t,BinTreeNode p)BinTree leftChild(BinTree t,BinTreeNode p)返回返回p p结点的左子树,当指定结点没有左子树时,返回一个特结点的左子树,当指定结点没有左子树时,返回一个特殊值。殊值。BinTree rightChild(BinTree t ,BinTreeNode p)BinTree rightChild(BinTree t ,BinTreeNode p)返回返回p p结点的右子树,当指定结点没有右子树时,返回一个特结点的右子树,当指定结点没有右子树时,返回一个特殊值。殊值。end ADT
18、 BinTree 此外作为抽象数据类型,二叉树还应该有插入、删除和检索节点等运算,由于于本章关系不大,故省略。由于二叉树的概念是递归定义的,二叉树中的每个结点也可标识以这个结点为根的二叉树,所以二叉树类型和二叉树中结点二叉树类型和二叉树中结点类型在具体实现时常常看成是同一种类型。类型在具体实现时常常看成是同一种类型。5.2 二叉树的周游 什么是周游n n二叉树的周游(二叉树的遍历)二叉树的周游(二叉树的遍历)是指按某种方式访问二叉树中的所有结点,使每个结点被访问一次且只被访问一次。n n深度优先周游(深度优先遍历)n n广度优先周游(广度优先遍历)5.2.2 周游的分类周游的分类n n深度优先
19、周游 若以符号D、L、R分别表示根结点、左子树、右子树,则二叉树的周游共有六种方式:DLR,LDR,LRD,DRL,RDL和RLD。如果限定先左后右,则只能采用前三种周游方式,即DLR,LRD和LDR,它们分别被称为先根次序(简称先序或前序)周游、后根次序(简称后序)周游和中根次序(简称中序)周游(也叫对称序次序周游)。n n先根次序:先根次序:先根次序:先根次序:若二叉树不空,则先访问根;然后按先根次序若二叉树不空,则先访问根;然后按先根次序周游左子树;最后按先根次序周游右子树。周游左子树;最后按先根次序周游右子树。n n如图所示二叉树,结点序列为:如图所示二叉树,结点序列为:A A,B B
20、,DD,C C,E E,GG,F F,HH,I I n n将按先根次序周游二叉树得到的线性表称为该二叉树的先根序列。将按先根次序周游二叉树得到的线性表称为该二叉树的先根序列。n n后根次序:后根次序:后根次序:后根次序:若二叉树不空,则先按后根次序周游左子树;若二叉树不空,则先按后根次序周游左子树;然后按后根次序周游右子树;最后访问根。然后按后根次序周游右子树;最后访问根。n n如图所示二叉树,结点序列为:如图所示二叉树,结点序列为:DD,B B,GG,E E,HH,I I,F F,C C,A A n n将按后根次序周游二叉树得到的线性表称为该二叉树的后根序列。将按后根次序周游二叉树得到的线性
21、表称为该二叉树的后根序列。n n中中中中根根根根次次次次序序序序:若若二二叉叉树树不不空空,则则先先按按中中根根次次序序周周游游左左子子树树;然然后后访访问问根根;最最后按中根次序周游右子树。后按中根次序周游右子树。n n如图所示二叉树,结点序列为:如图所示二叉树,结点序列为:DD,B B,A A,E E,GG,C C,HH,F F,I In n将按中根次序周游二叉树得到的线性表称将按中根次序周游二叉树得到的线性表称为该二叉树的中根序列。为该二叉树的中根序列。n n对于给定的二叉树,可以唯一确定它的先根序列、对于给定的二叉树,可以唯一确定它的先根序列、后根序列和中根序列。但是反过来,给定一个二
22、后根序列和中根序列。但是反过来,给定一个二叉树的任意一种周游的序列,无法唯一确定这个叉树的任意一种周游的序列,无法唯一确定这个二叉树。二叉树。n n一般而言,如果已知一个二叉树的中根序列,又一般而言,如果已知一个二叉树的中根序列,又知道另外一种周游序列(无论是先根序列还是后知道另外一种周游序列(无论是先根序列还是后根序列),就可以唯一确定这个二叉树。根序列),就可以唯一确定这个二叉树。n n广度优先周游n n若二叉树的高度为若二叉树的高度为h h,则从,则从0 0到到h h逐层如下处理:从左到逐层如下处理:从左到右逐个访问存在的结点。右逐个访问存在的结点。n n前图的二叉树,广度优先周游所得到
23、的结点序列为:前图的二叉树,广度优先周游所得到的结点序列为:A A,B B,C C,DD,E E,F F,GG,HH,I In n广度优先周游一棵二叉树所得到的结点序列,叫作这广度优先周游一棵二叉树所得到的结点序列,叫作这棵二叉树的棵二叉树的层次序列层次序列层次序列层次序列。5.2.3 一个例子一个例子n n对于二叉树不同的周游策略,所得到的不同线性序列,常对于二叉树不同的周游策略,所得到的不同线性序列,常常具有不同的实际意义。常具有不同的实际意义。n n如如图图是是算算术术表表达达式式(a-ba-b)(c+dc+d)的的一一种种语语法法结结构构图图。由由于于二二叉叉树树本本身身的的层层次次已
24、已经经可可以以定定义义计计算算的的次次序序,所所以以原原表达式中的括号就不需要了。表达式中的括号就不需要了。n n先根序列(前缀表达式):先根序列(前缀表达式):a b a b c d c d n n后根序列(后缀表达式):后根序列(后缀表达式):a b a b c d c d n n中根序列(中缀表达式)中根序列(中缀表达式):a a b c b c d dacbdn n中缀表达式中计算的次序与运算符的优先级中缀表达式中计算的次序与运算符的优先级可能产生冲突,所以需要把每个子树的中根可能产生冲突,所以需要把每个子树的中根序列用括号括起来。但前缀表达式、后缀表序列用括号括起来。但前缀表达式、后
25、缀表达式不需要。如前所述,中缀可转换为后缀。达式不需要。如前所述,中缀可转换为后缀。n n广度优先周游的层次序列没有什么实际意义。广度优先周游的层次序列没有什么实际意义。5.2.4 5.2.4 周游的抽象算法周游的抽象算法n n利用二叉树抽象数据类型中的定义,可以方便地写出二叉树的周游算法。n n这里给出的算法,都是建立在上节关于抽象数据类型基本运算的基础上。它们不依赖于二叉树的具体存储结构,所以称为抽象算法。深度优先递归算法深度优先递归算法三种深度优先周游的递归算法:先根次序周游:void preOrder(BinTree t)中根次序周游:void inOrder(BinTree t)后根
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 叉树与树 PPT 课件

限制150内