数据结构答案第5章.doc

上传人:sk****8 文档编号:3101923 上传时间:2019-05-21 格式:DOC 页数:15 大小:306KB
下载 相关 举报
数据结构答案第5章.doc_第1页
第1页 / 共15页
数据结构答案第5章.doc_第2页
第2页 / 共15页
数据结构答案第5章.doc_第3页
第3页 / 共15页
数据结构答案第5章.doc_第4页
第4页 / 共15页
数据结构答案第5章.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、第 5 章 树和二叉树1970-01-01第 5 章 树和二叉树课后习题讲解1. 填空题 树是 n(n0)结点的有限集合,在一棵非空树中,有( )个根结点,其余的结点分成 m(m0)个( )的集合,每个集合都是根结点的子树。【解答】有且仅有一个,互不相交 树中某结点的子树的个数称为该结点的( ),子树的根结点称为该结点的( ),该结点称为其子树根结点的( )。【解答】度,孩子,双亲 一棵二叉树的第 i(i1)层最多有( )个结点;一棵有 n(n0)个结点的满二叉树共有( )个叶子结点和( )个非终端结点。【解答】2i-1,(n+1)/2,(n-1)/2【分析】设满二叉树中叶子结点的个数为 n0

2、,度为 2 的结点个数为 n2,由于满二叉树中不存在度为 1 的结点,所以 n=n0+n2;由二叉树的性质 n0=n2+1,得 n0=(n+1)/2,n2=(n-1)/2 。 设高度为 h 的二叉树上只有度为 0 和度为 2 的结点,该二叉树的结点数可能达到的最大值是( ),最小值是( )。【解答】2h -1,2h-1【分析】最小结点个数的情况是第 1 层有 1 个结点,其他层上都只有 2 个结点。 深度为 k 的二叉树中,所含叶子的个数最多为( )。【解答】2k-1【分析】在满二叉树中叶子结点的个数达到最多。 具有 100 个结点的完全二叉树的叶子结点数为( )。【解答】50【分析】100

3、个结点的完全二叉树中最后一个结点的编号为 100,其双亲即最后一个分支结点的编号为50,也就是说,从编号 51 开始均为叶子。 已知一棵度为 3 的树有 2 个度为 1 的结点,3 个度为 2 的结点,4 个度为 3 的结点。则该树中有( )个叶子结点。【解答】12【分析】根据二叉树性质 3 的证明过程,有 n0=n2+2n3+1(n0、n2、n3 分别为叶子结点、度为 2 的结点和度为 3 的结点的个数)。 某二叉树的前序遍历序列是 ABCDEFG,中序遍历序列是 CBDAFGE,则其后序遍历序列是( )。【解答】CDBGFEA【分析】根据前序遍历序列和后序遍历序列将该二叉树构造出来。 在具

4、有 n 个结点的二叉链表中,共有( )个指针域,其中( )个指针域用于指向其左右孩子,剩下的( )个指针域则是空的。【解答】2n,n-1 ,n+1 在有 n 个叶子的哈夫曼树中,叶子结点总数为( ),分支结点总数为( )。【解答】n,n-1【分析】n-1 个分支结点是经过 n-1 次合并后得到的。2. 选择题 如果结点 A 有 3 个兄弟,B 是 A 的双亲,则结点 B 的度是( )。A 1 B 2 C 3 D 4【解答】D 设二叉树有 n 个结点,则其深度为( )。A n-1 B n C +1 D 不能确定【解答】D【分析】此题并没有指明是完全二叉树,则其深度最多是 n,最少是 +1。 二叉

5、树的前序序列和后序序列正好相反,则该二叉树一定是( )的二叉树。A 空或只有一个结点 B 高度等于其结点数C 任一结点无左孩子 D 任一结点无右孩子【解答】B【分析】此题注意是序列正好相反,则左斜树和右斜树均满足条件。 线索二叉树中某结点 R 没有左孩子的充要条件是( )。A R.lchild=NULL B R.ltag=0 C R.ltag=1 D R.rchild=NULL【解答】C【分析】线索二叉树中某结点是否有左孩子,不能通过左指针域是否为空来判断,而要判断左标志是否为1。 深度为 k 的完全二叉树至少有( )个结点,至多有( )个结点,具有 n 个结点的完全二叉树按层序从 1 开始编

6、号,则编号最小的叶子的序号是( )。A 2k-2+1 B 2k-1 C 2k -1 D 2k1 -1 E 2k+1 F 2k+1 -1 G 2k -1+1 H 2k【解答】B,C,A【分析】深度为 k 的完全二叉树最少结点数的情况应是第 k 层上只有 1 个结点,最多的情况是满二叉树,编号最小的叶子应该是在结点数最少的情况下,叶子结点的编号。 一个高度为 h 的满二叉树共有 n 个结点,其中有 m 个叶子结点,则有( )成立。A n=h+m B h+m=2n C m=h-1 D n=2m-1【解答】D【分析】满二叉树中没有度为 1 的结点,所以有 m 个叶子结点,则度为 2 的结点个数为 m-

7、1。 任何一棵二叉树的叶子结点在前序、中序、后序遍历序列中的相对次序( )。A 肯定不发生改变 B 肯定发生改变 C 不能确定 D 有时发生变化【解答】A【分析】三种遍历次序均是先左子树后右子树。 如果 T 是由有序树 T 转换而来的二叉树,那么 T 中结点的前序序列就是 T 中结点的( )序列,T 中结点的后序序列就是 T 中结点的( )序列。A 前序 B 中序 C 后序 D 层序【解答】A,B 设森林中有 4 棵树,树中结点的个数依次为 n1、n2 、n3、n4,则把森林转换成二叉树后,其根结点的右子树上有( )个结点,根结点的左子树上有( )个结点。A n1-1 B n1 C n1+n2

8、+n3 D n2+n3+n4【解答】D,A【分析】由森林转换的二叉树中,根结点即为第一棵树的根结点,根结点的左子树是由第一棵树中除了根结点以外其余结点组成的,根结点的右子树是由森林中除第一棵树外其他树转换来的。 讨论树、森林和二叉树的关系,目的是为了( )。A 借助二叉树上的运算方法去实现对树的一些运算B 将树、森林按二叉树的存储方式进行存储并利用二叉树的算法解决树的有关问题C 将树、森林转换成二叉树D 体现一种技巧,没有什么实际意义【解答】B3. 判断题 在线索二叉树中,任一结点均有指向其前趋和后继的线索。【解答】错。某结点是否有前驱或后继的线索,取决于该结点的标志域是否为 1。 在二叉树的

9、前序遍历序列中,任意一个结点均处在其子女的前面。【解答】对。由前序遍历的操作定义可知。 二叉树是度为 2 的树。【解答】错。二叉树和树是两种不同的树结构,例如,左斜树是一棵二叉树,但它的度为 1。 由树转换成二叉树,其根结点的右子树总是空的。【解答】对。因为根结点无兄弟结点。 用一维数组存储二叉树时,总是以前序遍历存储结点。【解答】错。二叉树的顺序存储结构是按层序存储的,一般适合存储完全二叉树。4证明:对任一满二叉树,其分枝数 B2(n0-1) 。(其中,n0 为终端结点数)【解答】因为在满二叉树中没有度为 1 的结点,所以有:n=n0+n2 设 B 为树中分枝数,则n=B+1所以B=n0 +

10、n2-1再由二叉树性质:n0=n2+1代入上式有:B=n0+n0-1-1=2(n0-1)5证明:已知一棵二叉树的前序序列和中序序列,则可唯一确定该二叉树。【解答】证明采用归纳法。设二叉树的前序遍历序列为 a1a2a3 an,中序遍历序列为 b1b2b3 bn。当 n=1 时,前序遍历序列为 a1,中序遍历序列为 b1,二叉树只有一个根结点,所以,a1= b1,可以唯一确定该二叉树;假设当 n=k 时,前序遍历序列 a1a2a3 ak 和中序遍历序列 b1b2b3 bk 可唯一确定该二叉树,下面证明当 n=k+1 时,前序遍历序列 a1a2a3 akak+1 和中序遍历序列 b1b2b3 bk

11、bk+1 可唯一确定一棵二叉树。在前序遍历序列中第一个访问的一定是根结点,即二叉树的根结点是 a1,在中序遍历序列中查找值为 a1的结点,假设为 bi,则 a1=bi 且 b1b2 bi-1 是对根结点 a1 的左子树进行中序遍历的结果,前序遍历序列 a2a3 ai 是对根结点 a1 的左子树进行前序遍历的结果,由归纳假设,前序遍历序列 a2a3 ai 和中序遍历序列 b1b2 bi-1 唯一确定了根结点的左子树,同样可证前序遍历序列 ai+1ai+2 ak+1 和中序遍历序列 bi+1bi+2 bk+1 唯一确定了根结点的右子树。6已知一棵度为 m 的树中有:n1 个度为 1 的结点,n2

12、个度为 2 的结点,nm 个度为 m 的结点,问该树中共有多少个叶子结点? 【解答】设该树的总结点数为 n,则n=n0+n1+n2+nm 又:n=分枝数+1=0n0+1n1+2n2+mnm+1由上述两式可得:n0= n2+2n3+(m-1)nm+17已知二叉树的中序和后序序列分别为 CBEDAFIGH 和 CEDBIFHGA,试构造该二叉树。【解答】二叉树的构造过程如图 5-12 所示。8对给定的一组权值 W(5,2 ,9,11,8,3 ,7),试构造相应的哈夫曼树,并计算它的带权路径长度。【解答】构造的哈夫曼树如图 5-13 所示。树的带权路径长度为:WPL=24+34+53+73+83+9

13、2+112=1209已知某字符串 S 中共有 8 种字符,各种字符分别出现 2 次、1 次、4 次、5 次、7 次、3 次、4 次和 9次,对该字符串用0,1进行前缀编码,问该字符串的编码至少有多少位。【解答】以各字符出现的次数作为叶子结点的权值构造的哈夫曼编码树如图 5-14 所示。其带权路径长度=25+15+34+53+92+43+43+72=98,所以,该字符串的编码长度至少为 98 位。10算法设计 设计算法求二叉树的结点个数。【解答】本算法不是要打印每个结点的值,而是求出结点的个数。所以可将遍历算法中的“访问”操作改为“计数操作”,将结点的数目累加到一个全局变量中,每个结点累加一次即

14、完成了结点个数的求解。具体算法如下: 设计算法按前序次序打印二叉树中的叶子结点。【解答】本算法的要求与前序遍历算法既有相同之处,又有不同之处。相同之处是打印次序均为前序,不同之处是此处不是打印每个结点的值,而是打印出其中的叶子结点,即为有条件打印。为此,将前序遍历算法中的访问操作改为条件打印即可。算法如下: 设计算法求二叉树的深度。【解答】当二叉树为空时,深度为 0;若二叉树不为空,深度应是其左右子树深度的最大值加 1,而其左右子树深度的求解又可通过递归调用本算法来完成。具体算法如下: 编写算法,要求输出二叉树后序遍历序列的逆序。【解答】要想得到后序的逆序,只要按照后序遍历相反的顺序即可,即先

15、访问根结点,再遍历根结点的右子树,最后遍历根结点的左子树。注意和前序遍历的区别,具体算法如下: 以二叉链表为存储结构,编写算法求二叉树中结点 x 的双亲。【解答】对二叉链表进行遍历,在遍历的过程中查找结点 x 并记载其双亲。具体算法如下: 以二叉链表为存储结构,在二叉树中删除以值 x 为根结点的子树。【解答】对二叉链表进行遍历,在遍历的过程中查找结点 x 并记载其双亲,然后将结点 x 的双亲结点中指向结点 x 的指针置空。具体算法如下: 一棵具有 n 个结点的二叉树采用顺序存储结构,编写算法对该二叉树进行前序遍历。【解答】按照题目要求,设置一个工作栈以完成对该树的非递归算法,思路如下: 每访问

16、一个结点,将此结点压栈,查看此结点是否有左子树,若有,访问左子树,重复执行该过程直到左子树为空。 从栈弹出一个结点,如果此结点有右子树,访问右子树执行步骤,否则重复执行步骤。具体算法如下: 编写算法交换二叉树中所有结点的左右子树。【解答】对二叉树进行后序遍历,在遍历过程中访问某结点时交换该结点的左右子树。具体算法如下: 以孩子兄弟表示法做存储结构,求树中结点 x 的第 i 个孩子。【解答】先在链表中进行遍历,在遍历过程中查找值等于 x 的结点,然后由此结点的最左孩子域 firstchild找到值为 x 结点的第一个孩子,再沿右兄弟域 rightsib 找到值为 x 结点的第 i 个孩子并返回指向这个孩子的指针。树的孩子兄弟表示法中的结点结构定义如下:template struct TNode

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。