第六章 树和二叉树.ppt
《第六章 树和二叉树.ppt》由会员分享,可在线阅读,更多相关《第六章 树和二叉树.ppt(85页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第6章 树和二叉树F 6.1 树的定义和基本术语F 6.2 二叉树F 6.3 遍历二叉树和线索二叉树F 6.4 树和森林F 6.6 赫夫曼树及其应用 特点:非线性结构,一个直接前驱,但可能有多个非线性结构,一个直接前驱,但可能有多个 直接后继(直接后继(1:n)第6章 树和二叉树1.树的定义 注:注:树的定义具有树的定义具有递归性递归性,即树中还有树。,即树中还有树。由一个或多个(n 0)结点组成的有限集合。在任何一棵非空树T中:(1)有且仅有一个结点称为根(root);(2)当n1时,其余的结点分为m(m 0)个 互不相交的有限集合T1、T2Tm。每个 集合本身又是棵树,被称作这个根的子树。
2、6.1 树的定义和基本术语A只有根结点的树只有根结点的树ABCDEFGHIJKLM根根子树子树6.1 树的定义和基本术语树的抽象数据类型定义D D是具有相同特性的数据元素的集合。是具有相同特性的数据元素的集合。ADT ADT TreeTree TreeTree数据对象数据对象D:数据操作数据操作P:数据关系数据关系R:若若D D是空集,则称为空树;是空集,则称为空树;/允许允许n=0n=0若若D D中仅含一个数据元素,则中仅含一个数据元素,则R R为空集;为空集;其他情况下的其他情况下的R R存在二元关系:存在二元关系:RootRoot唯一唯一/关于根的说明关于根的说明 DjDk=/关于子树不
3、相交的说明关于子树不相交的说明 /关于数据元素的说明关于数据元素的说明/至少至少1515个个6.1 树的定义和基本术语图形表示法嵌套集合表示法广义表表示法凹入表示法(目录表示法)树的表示方法6.1 树的定义和基本术语图形表示法:三亚学院三亚学院理工分院理工分院人文分院人文分院管理分院管理分院通信通信测控测控电信电信计算机计算机根子树ABCDEFGH6.1 树的定义和基本术语广义表表示法:ABCDEFGH根根作为由子树森林组成的作为由子树森林组成的表的名字写在表的左边表的名字写在表的左边A(B,C,D)A(B,C(E,F,G,H),),D)凹入表示法:ABCDEFGH6.1 树的定义和基本术语A
4、BCDEFGH嵌套表示法:ABDCEGFH6.1 树的定义和基本术语2.若干术语 ABCDJEFG HIKLM 根根-根结点(没有前驱)根结点(没有前驱)森林森林-指指m m棵不相交的树的集合棵不相交的树的集合有序树有序树-结点各子树从左至右有序,不能互换(左为第一)结点各子树从左至右有序,不能互换(左为第一)无序树无序树-结点各子树可互换位置结点各子树可互换位置 双亲双亲-上层的那个结点(直接前驱)上层的那个结点(直接前驱)孩子孩子-下层结点的子树的根(直接后继)下层结点的子树的根(直接后继)兄弟兄弟-同一双亲下的同一层结点(孩子之间互称兄弟)同一双亲下的同一层结点(孩子之间互称兄弟)堂兄弟
5、堂兄弟-双亲位于同一层的结点(但并非同一双亲)双亲位于同一层的结点(但并非同一双亲)祖先祖先-从根到该结点所经分支的所有结点从根到该结点所经分支的所有结点 子孙子孙-该结点下层子树的任一结点该结点下层子树的任一结点6.1 树的定义和基本术语ABCDJEFG HIKLM 结点结点-树中的数据元素树中的数据元素 结点的度结点的度-结点拥有的子树的数目结点拥有的子树的数目(有几个直接后继度就是几)(有几个直接后继度就是几)结点的层次结点的层次-从根到该结点的层数从根到该结点的层数(根结点算第一层)(根结点算第一层)叶子叶子-度为度为0 0的点(终端结点)的点(终端结点)分支结点分支结点-度不为度不为
6、0 0的点(非终端结点)的点(非终端结点)树的度树的度-所有结点度中的最大值所有结点度中的最大值(Max 各结点的度各结点的度)树的深度树的深度-所有结点中最大的层数所有结点中最大的层数(Max 各结点的层次各结点的层次 )(或高度)(或高度)6.1 树的定义和基本术语已知一棵树的集合为,,请画出这棵树,并回答下列问题:(1)哪个是根结点?(2)哪些是叶子结点?(3)哪个是结点G的双亲?(4)哪些是结点G的祖先?(5)哪些是结点G的孩子?(6)哪些是结点E的子孙?(7)哪些是结点E的兄弟?哪些是结点F的兄弟?(8)结点B和N的层次号分别是什么?(9)树的深度是多少?(10)以C为根的子树的深度
7、是多少?课堂练习(一)k1k2k3k4k7k5k6一、对照右图回答下列问题:一、对照右图回答下列问题:1、这棵树的根结点?2、这棵树的叶子结点?3、结点k3的度?4、这棵树的度?5、这棵树的深度?6、结点k1的孩子结点?7、结点k3的双亲结点?8、以k3为根的子树的深度?二、已知树的集合为二、已知树的集合为,,分别用分别用图形表示法、广义表表示法、嵌套表示法、凹入表示法画出这棵树。图形表示法、广义表表示法、嵌套表示法、凹入表示法画出这棵树。课堂练习(一)二叉树的结构最简单,规律性最强;二叉树的结构最简单,规律性最强;可以证明,所有树都能转化为唯一对应的二叉树,不失可以证明,所有树都能转化为唯一
8、对应的二叉树,不失一般性。一般性。1.二叉树的定义二叉树的定义2.二叉树的性质二叉树的性质3.二叉树的存储结构二叉树的存储结构6.2 二叉树1 1、二叉树的定义、二叉树的定义 每个结点最多只有两棵子树(不存在度大于每个结点最多只有两棵子树(不存在度大于2 2的结点);的结点);左子树和右子树次序不能颠倒(有序树)。左子树和右子树次序不能颠倒(有序树)。基本特征:基本特征:基本特征:基本特征:基本形态:基本形态:基本形态:基本形态:具有具有3 3个结点的二叉树可能有几种不同形态?普通树呢?个结点的二叉树可能有几种不同形态?普通树呢?6.2 二叉树-定义2 2、二叉树的性质、二叉树的性质 性质性质
9、1 1:在二叉树的第在二叉树的第i i层上至多有层上至多有2 2i-1i-1个个结点(结点(i0i0)。)。问:第问:第i i层上至少有层上至少有 个结点?个结点?性质性质2 2:深度为深度为k k的二叉树至多有的二叉树至多有2 2k k-1-1个结点(个结点(k0k0)。)。性质性质3 3:对于任何一棵二叉树,若度对于任何一棵二叉树,若度2 2的结点数有的结点数有n2n2个,个,叶子结点数为叶子结点数为n0n0,则,则n0=n2+1n0=n2+1。6.2 二叉树-性质证明性质3:二叉树中全部结点数二叉树中全部结点数n=n0+n1+n2n=n0+n1+n2(叶子数叶子数+度度1 1的结数的结数
10、+度为度为2 2的结点数的结点数)又又 二叉树中全部结点数二叉树中全部结点数n=B+1n=B+1(总分支数总分支数 +根结点根结点)(除根结点外,每个结点必有一个直接前驱,即一个分支)(除根结点外,每个结点必有一个直接前驱,即一个分支)而而 总分支数总分支数B=n1+2n2B=n1+2n2(度为度为1 1必有必有1 1个直接后继,度为个直接后继,度为2 2必有必有2 2个直接后继个直接后继)三式联立可得:三式联立可得:n0+n1+n2=n1+2n2+1n0+n1+n2=n1+2n2+1,即,即n0=n2+1n0=n2+16.2 二叉树-性质满二叉树:深度为深度为k且有且有 2k-1个结点的二叉
11、树。个结点的二叉树。特点:特点:每一层上的结点数都是最大结点数。每一层上的结点数都是最大结点数。可以对满二叉树的结点进行连续编号。可以对满二叉树的结点进行连续编号。4 48 89 95 51010 11116 61212 13137 71414 15152 23 31 1完全二叉树:完全二叉树:深度为深度为k,有,有n个结点的个结点的二叉树,当且仅当其每一个结点都与深度二叉树,当且仅当其每一个结点都与深度为为k的满二叉树中编号从的满二叉树中编号从1至至n 的结点一一的结点一一对应时,称之为完全二叉树。对应时,称之为完全二叉树。特点特点:(1)叶子结点只可能在层次最大的两层上出现;叶子结点只可能
12、在层次最大的两层上出现;(2)对任一结点,若其右分支下的子孙的最大层次为)对任一结点,若其右分支下的子孙的最大层次为h,则其左分支下的子孙的最大层次数必为则其左分支下的子孙的最大层次数必为h或或h+1。4 48 89 95 510106 67 72 23 31 16.2 二叉树-特例12311458912136710141512311458912671012345671234566.2 二叉树-特例对于特殊性质的二叉树,还具备以下2个性质:性质性质4 4:具有具有n n个结点的完全二叉树的深度必为个结点的完全二叉树的深度必为 loglogloglog2 2 2 2n n n n 1。性质性质5
13、 5:如果对一棵有如果对一棵有n个结点的完全二叉树个结点的完全二叉树(其深度为其深度为 loglogloglog2 2 2 2n n n n 1)的结点按层序编号,则对任一结点的结点按层序编号,则对任一结点i(1in),有:),有:1)如果)如果i i=1,则结点则结点i i是二叉树的根,无双亲;如果是二叉树的根,无双亲;如果i i1,则其双亲则其双亲parent(i i)是结点是结点 i/2 ;2)如果如果2i in,则结点则结点i无左孩子无左孩子(结点结点i i为叶子结点为叶子结点);否则其;否则其 左孩子左孩子lchild(i i)是结点是结点2i i;3)如果如果2i i+1n,则结点
14、则结点i i无右孩子;否则其右孩子无右孩子;否则其右孩子rchild(i i)是结点是结点2i i+1。4 48 89 95 510106 67 72 23 31 16.2 二叉树-性质一、顺序存储结构3 3、二叉树的存储结构、二叉树的存储结构用一组地址连续的存储单元依次用一组地址连续的存储单元依次自上而下、自左至右存储二叉树自上而下、自左至右存储二叉树上的结点元素。上的结点元素。DHIEFGBCA0123456789ABCDEFGHIDFEBCA0123456789ABCDE0000F仅适合于完全二叉树仅适合于完全二叉树对于非完全二叉树:对于非完全二叉树:将各层空缺处全部补上将各层空缺处全部
15、补上“虚结点虚结点”,其内容为,其内容为0 0缺点:缺点:浪费空间;浪费空间;插入、删除不便插入、删除不便 6.2 二叉树-存储结构二叉树的顺序存储表示可描述为:#define MAX_TREE_SIZE 100 /二叉树的最大结点数二叉树的最大结点数typedef TElemType SqBiTreeMAX_TREE_SIZE;/0号单元存储根结点号单元存储根结点SqBiTree bt;即将即将 bt 定义为含有定义为含有MAX_TREE_SIZE个个 TElemType 类型元素的一维数组。类型元素的一维数组。二、链式存储结构二叉链表二叉链表中包含中包含2个指针域。个指针域。一般从根结点开
16、始存储。一般从根结点开始存储。DATAPARENT LCHILD RCHILDlchild data rchild lchild data parent rchild 为了便于找到结点的双亲,为了便于找到结点的双亲,可再增加一个双亲域指针,可再增加一个双亲域指针,将二叉链表变成将二叉链表变成三叉链表三叉链表。链表的链表的头指针头指针指向二叉树的根结点。指向二叉树的根结点。6.2 二叉树-存储结构二叉链表类型表述如下:ltypedef struct BiTNode /结点结构l TElemType data;l struct BiTNode *lchild,*rchild;l /左右孩子指针l
17、BiTNode,*BiTree;结点结构结点结构:lchild data rchild结论1:在含有n个结点的二叉链表中有n1个空链域。(提示:n0=n2+1)两个结论两个结论结论2:在含有n个结点的度为k的树中必有n(k-1)+1 个空链域。(结论1的推广)三叉链表类型表述如下:ltypedef struct TriTNode l DataType data;l struct TriTNode*parent;l struct TriTNode*lchild;l struct TriTNode*rchild;lTriTNode,*TriTree;结点结构结点结构:例:例:CEFDBGAABCD
18、EFG A B C D E F G二叉链表三叉链表在含有n个结点的二叉链表中有n+1个空链域空空指针个数:指针个数:2*n0+1*n1+0*n2=2n0+n1=n0+n1+n0=n0+n1+n2+1=n+16.2 二叉树-存储结构1.设T是一棵完全二叉树,则T的根结点的左子树的结点数n与右子树的结点数n的大小关系是。2.一棵深度为6的满二叉树有个叶子和个分支结点。3.设一棵完全二叉树具有36个结点,则此完全二叉树有个叶子结点,有个度为2的结点,有个结点只有非空左子树,有个结点只有非空右子树。4.一棵满k叉树上的叶子结点数n0和非叶子结点数n1之间满足以下关系:n0=(k-1)*n1+15.一棵
19、二叉树若采用顺序存储结构,存储于数组T中,如下图所示,请画出该二叉树的二叉链表存储形式。1234567891011121314151617181920e a fdgc jh ib课堂练习(二)一、遍历二叉树按某条搜索路径访问树中每个结点,使得每个结点均被按某条搜索路径访问树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。访问一次,而且仅被访问一次。v二叉树由根、左子树、右子树构成,三者的组合可构成二叉树由根、左子树、右子树构成,三者的组合可构成6种种 遍历方案:遍历方案:根左右、根右左、左根右、左右根、右根左、右左根根左右、根右左、左根右、左右根、右根左、右左根v若若限定限定“先左后右
20、先左后右”,则有,则有3种实现方案:种实现方案:根左右根左右 左根右左根右 左右根左右根先序遍历 中序遍历 后序遍历6.3 遍历二叉树和线索二叉树DHIFGBCA1、先序遍历2、中序遍历3、后序遍历访问根结点访问根结点先序遍历左子树先序遍历左子树先序遍历右子树先序遍历右子树A BD CFGH I中序遍历左子树中序遍历左子树访问根结点访问根结点中序遍历右子树中序遍历右子树DB A FCHGI后序遍历左子树后序遍历左子树后序遍历右子树后序遍历右子树访问根结点访问根结点DB FHIGC A例1:6.3 遍历二叉树和线索二叉树1、先序遍历2、中序遍历3、后序遍历+*/AB C DEA/B*C*D+EA
21、 B/C*D例2:*AB/C*E+D*E+前缀表达式前缀表达式中缀表达式中缀表达式后缀表达式后缀表达式6.3 遍历二叉树和线索二叉树例:例:已知一棵二叉树的中序序列和后序序列分别是已知一棵二叉树的中序序列和后序序列分别是BDCEAFHG 和和 DECBHGFA,请画出这棵二叉树。请画出这棵二叉树。讨论:若已知若已知先序序列先序序列(或后序序列)和(或后序序列)和中序序列中序序列,能否恢复,能否恢复 出对应的二叉树?出对应的二叉树?分析:分析:由后序遍历特征,由后序遍历特征,根结点必在后序序列尾部根结点必在后序序列尾部(即(即A A)由中序遍历特征,由中序遍历特征,根结点必在其中间,而且其左部必
22、全部是左根结点必在其中间,而且其左部必全部是左子树的子孙子树的子孙(即(即BDCEBDCE),),其右部必全部是右子树的子孙(即其右部必全部是右子树的子孙(即FHGFHG)继而,根据后序中的继而,根据后序中的DECBDECB子树可确定子树可确定B B为为A A的左孩子,根据的左孩子,根据HGFHGF子子串可确定串可确定F F为为A A的右孩子;以此类推的右孩子;以此类推6.3 遍历二叉树和线索二叉树已知中序遍历:已知中序遍历:B D C E A F H G已知后序遍历:已知后序遍历:D E C B H G F A(B D C E)(F H G)A(D C E)BFGHCD EAABC6.3 遍
23、历二叉树和线索二叉树已知先序遍历序列如下:已知先序遍历序列如下:ABDCEFABCEFD6.3 遍历二叉树和线索二叉树二、线索二叉树普通二叉树只能找到结点的左右孩子的信息普通二叉树只能找到结点的左右孩子的信息,而该结点,而该结点的直接前驱和直接后继只能在遍历过程中获得。的直接前驱和直接后继只能在遍历过程中获得。若若将遍历后对应的有关前驱和后继预存起来将遍历后对应的有关前驱和后继预存起来,则从第一,则从第一个结点开始就能很快地遍历整个树了。个结点开始就能很快地遍历整个树了。例如中序遍历结果:例如中序遍历结果:A/B*C*D+E,实际上已将二叉树转为线实际上已将二叉树转为线性排列,显然具有唯一前驱
24、和唯一后继。性排列,显然具有唯一前驱和唯一后继。如何预存这类信息呢?增加两个域增加两个域:前驱指针、后继指针前驱指针、后继指针利用利用n+1n+1个空链域个空链域6.3 遍历二叉树和线索二叉树规定:规定:1)若结点有左子树,则)若结点有左子树,则lchild指向其左孩子;指向其左孩子;否则,否则,lchild指向其直接前驱(即线索);指向其直接前驱(即线索);2)若结点有右子树,则)若结点有右子树,则rchild指向其右孩子;指向其右孩子;否则,否则,rchild指向其直接后继(即线索);指向其直接后继(即线索);lchild data rchild约定:约定:当当TagTag域为域为0 0时
25、,表示时,表示孩子孩子情况;情况;当当TagTag域为域为1 1时,表示时,表示线索线索情况。情况。lchild LTag data RTag rchild6.3 遍历二叉树和线索二叉树有关线索二叉树的几个术语:有关线索二叉树的几个术语:线索链表:线索链表:用上述结点构成的二叉链表用上述结点构成的二叉链表 线索:线索:指向前驱和后继结点的指针指向前驱和后继结点的指针 线索二叉树:线索二叉树:同加上线索的二叉树(同加上线索的二叉树(图形式样图形式样)线索化:线索化:对二叉树以某种次序遍历使其变为线索二叉树的过程对二叉树以某种次序遍历使其变为线索二叉树的过程 线索化过程就是在遍历过程中修改空指针的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六章 树和二叉树 第六 二叉
限制150内