61树与二叉树典型例题讲解

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

例题6.1已知一棵度为m的树有n1个度为1的结点,n2个度为2的结点,…,nm个为m结点,问该树中有多少个叶子结点?解:设n为总结点个数,n0为叶子结点(即度为0的结点个数),则有:n=n0+n1+n2+…+nm(1)又有(分支总数):n-1=n1*1+n2*2+n3*3+…+nm*m(2)(因为一个结点对应一个分支)式(2)-(1)得:1=n0-n2-2n3-…-(m-1)nm则有:n0=1+n2+2n3+…+(m-1)nm练习•设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1则T中的叶子数为证明:•二叉树度为0的结点总比度为2的结点多1个因为二叉树所有结点滴个数都不大于2,所以结点总数n=n0+n1+n2(1)又因为度为1和度为2的结点分别有1个子树和2个子树,所以,二叉树中子树结点就有n(子)=n1+2n2二叉树中只有根节点不是子树结点,所以二叉树结点总数n=n(子)+1即n=n1+2n2+1(2)结合(1)式和(2)式就得n0=n2+1练习1、具有10个叶结点的二叉树中有()个度为2的结点A.8B.9C.10D.ll2、一棵具有n个结点的完全二叉树的树高度(深度)是()A.logn+1B.logn+1C.lognD.logn-13、一棵树高为K的完全二叉树至少有()个结点。A.2k–1B.2k-1–1C.2k-1D.2k例题6.2写出如图6.2所示的二叉树的前(先)序﹑中序和后序遍历序列.解:⑴前序为“根左右”,从左到右收集的前序序列为:fdbacegihj;⑵中序为“左根右”,从左到右收集的中序序列为:abcdefghij;⑶后序为“左右根”,从左到右收集的后序序列为:acbedhjigf。fdgibehjac练习•一棵二叉树如图所示:写出对此树的先根、中跟、后跟序列。•先根序列:ABDEFC•中根序列:DEFBAC•后根序列:FEDBCA已知先序和中序求后序•先序:ABCDEFGH•中序:BDCEAFHG•后序:已知中序和后序求先序•中序:BDCEAFHG•后序:DECBHGFA•求先序:问题•已知先序和后序能求中序么?例题6.3若一棵二叉树,左右子树均有三个结点,其左子树的前(先)序序列与中序序列相同,右子树的中序序列与后序序列相同,试构造该树。【解】据题意,左子树的前序序列与中序序列相同,即有:前序:根左右中序:左根右也即,以左子树为根的树无左孩子。此处,右子树的中序序列与后序序列相同,即有:中序:左根右后序:左右根也即,以右子树为根的树无右孩子。由此构造该树如下图所示。例题4一棵非空的二叉树其先序序列和后序序列正好相反,画出这棵二叉树的形状。解:先序遍历为“根左右”,后序遍历为“左右根”。根结点在两个序列中的位置分别在最前和最后,正好相反;因此,若要两个序列正好相反,则左右子树必有一个不存在。其先序序列和后序序列正好相反的二叉树必为单支树。即这棵二叉树的形状如下图所示。例题6.5已知一棵完全二叉树共有892个结点,试求:⑴树的高度;⑵叶结点数;⑶单支(度为1)结点数;⑷最后一个非终端结点的序号。解:(1)根据性质2,已知深度为k的二叉树至多有2k-1个结点(k≥1),由于:29-1﹤892﹤210-1,所以树的高度为10。(2)对完全二叉树来说,度为1的结点只能是0或1。由n=n0+n1+n2和n0=n2+1(性质3)得:设n1=0,则有892=n0+0+n2=n2+1+n2=2n2+1,因得到的n2=891/2不为整数而出错;n1=1,则有892=n0+1+n2=n2+1+1+n2=2n2+2,得n2=445,代入n0=n2+1得n0=446;故叶结点数为446。(3)由⑵解过程可知n1=1,单支结点数为1。(4)对有n个结点的完全二叉树,最后一个树叶结点,即序号为n的叶结点其双亲结点[n/2]为最后一个非终端结点,则序号为892/2=446。此外,由⑵可知:n2=445,n1=1;则最后一个非终端结点的序号为445+1=446。对于⑵还可以采用如下:因892﹥29-1,则前9层的结点数为29-1=511个;而第10层的结点为892-511=381个,且381个结点对应第9层的父结点为[381/2]=191,而第9层的其余结点也是叶结点,即29-1=256,256-191=65,故第9层共有65个叶结点,则第10层叶结点+第9层叶结点=381+65=446。例题6.6对如下图所示的二叉树:⑴写出对它们进行先序﹑中序和后序遍历时得到的结点序列;⑵画出它们的先序线索二叉树和后序线索二叉树。【解】对图进行先序﹑中序和后序遍历时得到的结点序列分别如下:先序遍历的结点序列为:ABDFGHIEC中序遍历的结点序列为:FDHGIBEAC后序遍历的结点序列为:FHIGDEBCAABCGDEHIF二叉树的先序线索二叉树如下左图所示,后序线索二叉树如下右图所示。ABCGDEHIFNIL先序线索二叉树ABCGDEHIF后序线索二叉树NIL例题6.7如果已知森林的前序序列和后序序列分别为ABCDEFIGJH和BDCAIFJGHE,请画出该森林。【解】由于森林的前序序列与其对应的二叉树前序序列相同,而森林的后序序列与其对应的二叉树中序序列相同。因此,根据二叉树前序序列ABCDEFIGJH和中序序列BDCAIFJGHE可画出二叉树如下图所示。ABEDCGJIFH而由二叉树转化为森林的步骤得到对应的森林。ABDCEGJIFH例题6.8证明n0个叶子结点的哈夫曼树共有2n0-1个结点。证明:设度为1和2的结点个数分别为n1和n2,二叉树结点总数为n,则有:n=n0+n1+n2根据二叉树的性质知:n0=n2+1此外,由哈夫曼树的构造原理可知:哈夫曼树不存在度为1的结点,即n1=0;所以由①②可得:n=n0+0+n2=n0+n0-1=2n0-1abcdefhgi601234578bdefghicdatafc12^34^^867^5^^^^a^CTree.r=0CTree.n=9例6.9用孩子链表结构表示西图所示的树612345789acdefghibdatafc23459786^^^^^^^^^012235551parentabcdefhgiPCTree.r=1PCTree.n=9例6.10用带双亲的孩子链表表示下图所示的树例6.11用孩子兄弟表示法表示下图所示的树(重点掌握)abcdefhgibda^c^^e^f^^g^h^i^^与树对应的二叉树表示其根结点无右子树。(1)树与二叉树转换ACBED树ABCDE二叉树A^^BC^D^^E^A^^BC^D^^E^A^^BC^D^^E^对应例6.12森林、树与二叉树转换(以二叉链表为纽带)森林转换成二叉树将各棵树分别转换成二叉树(根结点均无右孩子);将各二叉树的根结点依次用分支线连起来;以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树型结构。森林转化成二叉树的过程:ABCDEFGHIJ森林ABCDEFGHIJ对应二叉树ABCDEFGHIJABCDEFGHIJ连接跟结点旋转成二叉树例6.13二叉树转换成森林抹线:将二叉树中根结点与其右孩子连线,及沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成孤立的二叉树还原:将孤立的二叉树还原成树ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ例6.14Huffman编码设计实例已知某系统在通信联络中只可能出现8种字符,其概率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计Huffman编码。解一:先构造Huffman树,再进行编码。Huffman编码实现过程:以报文所用的不同字符为叶结点,以字符出现频率为权重构造Huffman树;然后将树中结点指向其左孩子的分支标“0”,指向其右孩子的分支标“1”;每个字符的编码即为从根到每个叶子(字符)的路径上得到的0、1序列。这种对字符的编码就是Huffman编码。1135819234229148715295810001000011100111HC1011021031110411115110600701118011Huffman编码Huffman树解二:利用Huffman编码算法实现。根据题意,取8个字符的权分别为(5,29,7,8,14,23,3,11),n=8,则m=2*8-1=15,按上述算法可构造一棵Huffman树,如下左图和右图分别Huffman树的初始状态和终止状态。weightparentlchildrchild150002290003700048000514000623000730008110009000100001100012000130001400015000weightparentlchildrchild1590022914003710004810005141200623130073900811110098111710151234111913891229145101342156111458152141510001314HT初始状态HT终止状态1135819234229148715295810001000011100111HC1011021031110411115110600701118011Huffman编码Huffman树•3.树的遍历•遍历:按一定搜索路经走遍树的各个顶点,使树中每一结点均被且仅被访问一次。•目的:产生树中所有结点的一个线性排列。•常用方法:•先根(序)遍历:先访问树的根结点,然后依次先根遍历根的每棵子树。•后根(序)遍历:先依次后根遍历每棵子树,然后访问根结点。•按层次遍历:先访问第一层上的结点,然后依次遍历第二层,……直到最后一层的结点。ABCDEFGHIJKLMNO先序遍历:后序遍历:层次遍历:ABEFIGCDHJKLNOMEIFGBCJKNOLMHDAABCDEFGHIJKLMNO例6.16树的遍历ABCDEFGHIJ例6.17森林遍历先序遍历结果:ABCDEFGHIJ中序遍历结果:BCDAFEHJIG

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功