ImageVerifierCode 换一换
格式:DOCX , 页数:76 ,大小:671.89KB ,
资源ID:3964119      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3964119.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(软考软件设计师第6章树和二叉树答案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

软考软件设计师第6章树和二叉树答案.docx

1、软考软件设计师第6章 树和二叉树答案第6章 树和二叉树一、选择题 1.D2.B3.C4.D5.D6.A7.1C7.2A7.3C7.4A7.5C8.B9.C10.D11.B12.E13.D14.D15.C16.B17.C18.C19.B20.D21.A22.A23.C24.C25.C26.C27.C28.C29.B30.C31.D32.B33.A34.D35.B36.B37.C38.B39.B40.B41.1F41.2B42.C43.B44.C45.C46.B47.D48.B49.C50.A51.C52.C53.C54.D55.C56.B57.A58.D59.D60.B61.1B61.2A61.

2、3G62.B63.B64.D65.D66.1C66.2D66.3F66.4H66.5I部分答案解释如下。12. 由二叉树结点的公式:n=n0+n1+n2=n0+n1+(n0-1)=2n0+n1-1, 因为n=1001,所以1002=2n0+n1,在完全二叉树树中,n1只能取0或1,在本题中只能取0,故n=501,因此选E。42.前序序列是“根左右”,后序序列是“左右根”,若要这两个序列相反,只有单支树,所以本题的A和B均对,单支树的特点是只有一个叶子结点,故C是最合适的,选C。A或B都不全。由本题可解答44题。47. 左子树为空的二叉树的根结点的左线索为空(无前驱),先序序列的最后结点的右线索

3、为空(无后继),共2个空链域。52线索二叉树是利用二叉树的空链域加上线索,n个结点的二叉树有n+1个空链域。二、判断题1.2.3.4. 5. 6. 7.8.9. 10.11.12.13.14.15.16.17.18.19. 20.21. 22.23.24.25.26.27.28.29.30.31.32.33.34.35.36. 37.38.39.40.41.(3)42.43.44.45.46.47.48.49.50.部分答案解释如下。6只有在确定何序(前序、中序、后序或层次)遍历后,遍历结果才唯一。19任何结点至多只有左子树的二叉树的遍历就不需要栈。24. 只对完全二叉树适用,编号为i的结点的

4、左儿子的编号为2i(2i=n),右儿子是2i+1(2i+1lchild=null & p-rchlid=null 4.(1) +a*b3*4-cd (2)18 5.平衡因子6. 9 7. 12 8.(1)2k-1 (2)2k-1 9.(1)2H-1 (2)2H-1 (3)H=log2N+1 10. 用顺序存储二叉树时,要按完全二叉树的形式存储,非完全二叉树存储时,要加“虚结点”。设编号为i和j的结点在顺序存储中的下标为s 和t ,则结点i和j在同一层上的条件是log2s=log2t。11. log2i=log2j 12.(1)0 (2)(n-1)/2 (3)(n+1)/2 (4) log2n

5、+1 13.n 14. N2+1 15.(1) 2K+1-1 (2) k+1 16. N/2 17. 2k-2 18. 64 19. 99 20. 11 21.(1) n1-1 (2)n2+n3 22.(1)2k-2+1(第k层1个结点,总结点个数是2H-1,其双亲是2H-1/2=2k-2)(2) log2i+1 23.6924. 4 25.3h-1 26. n/2 27. log2k+1 28.(1)完全二叉树 (2)单枝树,树中任一结点(除最后一个结点是叶子外),只有左子女或只有右子女。29.N+1 30.(1) 128(第七层满,加第八层个)(2) 731. 0至多个。任意二叉树,度为的

6、结点个数没限制。只有完全二叉树,度为的结点个数才至多为1。3221 33.(1)2 (2) n-1 (3) 1 (4) n (5) 1 (6) n-134.(1) FEGHDCB (2)BEF(该二叉树转换成森林,含三棵树,其第一棵树的先根次序是BEF)35.(1)先序(2)中序 36. (1)EACBDGF (2)2 37.任何结点至多只有右子女的二叉树。38.(1)a (2) dbe (3) hfcg 39.(1) .D.G.B.A.E.H.C.F. (2) .GD.B.HE.FCA40.DGEBFCA 41(1)5 (2)略 42.二叉排序树 43.二叉树 44.前序 45.(1)先根次

7、序(2)中根次序 46.双亲的右子树中最左下的叶子结点 47.2 48.(n+1)/249.31(x的后继是经x的双亲y的右子树中最左下的叶结点) 50.(1)前驱 (2)后继 51.(1)1 (2)y.lchild (3)0 (4)x (5)1 (6) y (7)x(编者注:本题按中序线索化)52.带权路径长度最小的二叉树,又称最优二叉树 53.69 54.(1)6 (2)261 55.(1)80 (2)001(不唯一)56.2n0-157.本题是表达式求值,是在二叉排序树中删除值为x的结点。首先查找x,若没有x,则结束。否则分成四种情况讨论:x结点有左右子树;只有左子树;只有右子树和本身是

8、叶子。(1)Postoder_eval(t.Lchild) (2) Postorder_eval(t.Rchild) (3)ERROR(无此运算符)(4)A (5)tempA.Lchild (6)tempA=NULL (7)q.Rchild (8)q (9)tempA.Rchild (10)tempA.Itemr.Item 58.(1) IF t=NIL THEN num:=0 ELSE num:=num(t.l)+num(t.r)+1 (2) IF (t=NIL) AND (mn) OR (tNIL) AND (mn) THEN all:=falseELSE BEGIN chk(t.l,2*

9、m);chk (t.r,2*m+1);END59. (1)p-rchild (2)p-lchild (3)p-lchild (4)ADDQ(Q,p-lchild) (5)ADDQ(Q,p-rchild) 60.(1)t-rchild!=null (2)t-rchild!=null (3)N0+ (4)count(t-lchild) (5)count(t-rchild)61.(1)p (2)0 (3)height(p-lchild) (4)0 (5)height(p-rchild) (6)lh+1 (7)rh+1 (8)062.(1)pNIL (2)addx(p) (3)addx(tree) (

10、4)r.rchild63.(1)stacktp=t (2) p=stacktp- (3)p (4)+tp64. 本算法将二叉树的左右子树交换 (1)new (s) /初始化,申请结点 (2) s.next=NIL /s是带头结点的链栈(3)s.next.data/取栈顶元素 (4)s.next:= p.next /栈顶指针下移(5)dispose(p) /回收空间 (6)p.next:=s.next/将新结点入链栈 (7)push(s,p.rchild) /先沿树的左分支向下,将p的右子女入栈保存 (8)NOT empty(s) (9) finishe:=true /已完成 (10)finis

11、h=true (或s.next=NIL)65.(1)new(t) (2)2*in (3)t.lchild,2*i (4)2*i+1n (5)t.rchild,2*i+1 (6)166.(1)Push(s,p) (2)K=2 (3)p-data=ch (4)BT=p (5) insch67.(1)result; (2)p:=p.link; (3) q:=q.pre ()()顺序可变)68.(1)top+ (2) stacktop=p-rchild (3)top+ (4)stacktop=p-lchild69(1)(i=j) AND (x=y) (2)AiBk (3)k-x (4)creatBT(

12、i+1,i+L,x,k-1,s.lchild) (5) creatBT(i+L+1,j,k+1,y,s.rchild)70. (1)push(s,bt) (2)pop(s) (3)push(s,p.rchild) / p的右子树进栈71(1) p=p-lchild / 沿左子树向下 (2)p=p-rchild 72(1)0 (2)hlhr (3)hr=hl73. (1)top0 (2)t*2 / 沿左分枝向下 (3)top-1 / 退栈74(1)p:=p.lchild (2)(3)p:=S.datas.top.rchild (4)s.top=075. (1)*ppos / 根结点 (2)rpo

13、s=ipos (3)rposipos (4)ipos (5)ppos+176. (1)top0 (2)stacktop:=nd.right (3)nd.leftNIL (4)top:=top+1 (左子树非空)77. (1) pthr / 未循环结束 (2)p-ltag=0 (3)p-lchild (4)p-rtag=1 & p-rchild!=thr (5) p=p-rchild (6)p=p-rchild78. 若p.rtag=1,则p.rchild 为后继,否则p的后继是p的右子树中最左下的结点(1)q=p.rchild (2)q.ltag=0 (3) q.lchild79(1)tree

14、-lchild (2)null (3)pre-rchild (4)pre-rtag=1 (5) pre-right=tree; (6) tree-right (注(4)和(5)顺序可换)80(1)node-rflag=0 (2)*x=bt (3) *x=node-right 四应用题1树的孩子兄弟链表表示法和二叉树二叉链表表示法,本质是一样的,只是解释不同,也就是说树(树是森林的特例,即森林中只有一棵树的特殊情况)可用二叉树唯一表示,并可使用二叉树的一些算法去解决树和森林中的问题。树和二叉树的区别有三:一是二叉树的度至多为2,树无此限制;二是二叉树有左右子树之分,即使在只有一个分枝的情况下,

15、也必须指出是左子树还是右子树,树无此限制;三是二叉树允许为空,树一般不允许为空(个别书上允许为空)。2.树和二叉树逻辑上都是树形结构,区别有以上题1所述三点。二叉树不是树的特例。3线性表属于约束最强的线性结构,在非空线性表中,只有一个“第一个”元素,也只有一个“最后一个”元素;除第一个元素外,每个元素有唯一前驱;除最后一个元素外,每个元素有唯一后继。树是一种层次结构,有且只有一个根结点,每个结点可以有多个子女,但只有一个双亲(根无双亲),从这个意义上说存在一(双亲)对多(子女)的关系。广义表中的元素既可以是原子,也可以是子表,子表可以为它表共享。从表中套表意义上说,广义表也是层次结构。从逻辑上

16、讲,树和广义表均属非线性结构。但在以下意义上,又蜕变为线性结构。如度为1的树,以及广义表中的元素都是原子时。另外,广义表从元素之间的关系可看成前驱和后继,也符合线性表,但这时元素有原子,也有子表,即元素并不属于同一数据对象。4方法有二。一是对该算术表达式(二叉树)进行后序遍历,得到表达式的后序遍历序列,再按后缀表达式求值;二是递归求出左子树表达式的值,再递归求出右子树表达式的值,最后按根结点运算符(+、-、*、/ 等)进行最后求值。5该算术表达式转化的二叉树如右图所示。 第5题图6n(n0)个结点的d度树共有nd个链域,除根结点外,每个结点均有一个指针所指,故该树的空链域有nd-(n-1)=n

17、(d-1)+1个。7证明:设二叉树度为0和2的结点数及总的结点数分别为n0,n2 和n,则n=n0+n2 (1)再设二叉树的分支数为B,除根结点外,每个结点都有一个分支所指,则 n=B+1 (2)度为零的结点是叶子,没有分支,而度为2的结点有两个分支,因此(2)式可写为n=2*n2+1 (3)由(1)、(3)得n2=n0-1,代入(1),并由(1)和(2)得B=2*(n0-1)。 证毕。8(1)kh-1(h为层数)(2)因为该树每层上均有Kh-1个结点,从根开始编号为1,则结点i的从右向左数第个孩子的结点编号为ki。设n 为结点i的子女,则关系式(i-1)k+2=n1)的前一结点编号为n-1(

18、其最右边子女编号是(n-1)*k+1),故结点 n的第 i个孩子的编号是(n-1)*k+1+i。(4) 根据以上分析,结点n有右兄弟的条件是,它不是双亲的从右数的第一子女,即 (n-1)%k!=0,其右兄弟编号是n+1。9最低高度二叉树的特点是,除最下层结点个数不满外,其余各层的结点数都应达到各层的最大值。设n个结点的二叉树的最低高度是h,则n应满足2h-1nj) i=i/2; else j=j/2;退出while后,若i/2=0,则最近公共祖先为根结点,否则最近公共祖先是i/2。15N个结点的K叉树,最大高度N(只有一个叶结点的任意k叉树)。设最小高度为H,第i(1=i=H)层的结点数Ki-

19、1,则N=1+k+k2+ kH-1,由此得H=logK(N(K-1)+1)16. 结点个数在20到40的满二叉树且结点数是素数的数是31,其叶子数是16。17设分枝结点和叶子结点数分别是为nk和n0,因此有n=n0+nk (1)另外从树的分枝数B与结点的关系有 n=B+1=K*nk +1 (2)由(1)和(2)有 n0=n-nk=(n(K-1)+1)/K18.用顺序存储结构存储n个结点的完全二叉树。编号为i的结点,其双亲编号是i/2(i=1时无双亲),其左子女是2i(若2i=n,否则i无左子女),右子女是2i+1(若2i+1=n,否则无右子女)。19. 根据完全二叉树的性质,最后一个结点(编号

20、为n)的双亲结点的编号是n/2,这是最后一个分枝结点,在它之后是第一个终端(叶子)结点,故序号最小的叶子结点的下标是n/2+1。20. 按前序遍历对顶点编号,即根结点从开始,对前序遍历序列的结点从小到大编号。21. 设树的结点数为n,分枝数为B,则下面二式成立n=n0+n1+n2+nm (1)n=B+1= n1+2n2+mnm (2)由(1)和(2)得叶子结点数n0=1+22. log2n +1 23.1524. 该结论不成立。对于任一aA,可在B中找到最近祖先f。a在f的左子树上。对于从f到根结点路径上所有bB,有可能f在b的右子树上,因而a也就在b的右子树上,这时ab,因此ab不成立。同理

21、可以证明bc不成立。而对于任何aA,cC均有a=2)。29. (1)根据二叉树度为2 结点个数等于叶子结点个数减1的性质,故具有n个叶子结点且非叶子结点均有左左子树的二叉树的结点数是2n-1。 (2)证明:当i=1时,2-(1-1)=20=1,公式成立。设当i=n-1时公式成立,证明当i=n时公式仍成立。 设某叶子结点的层号为t,当将该结点变为内部结点,从而再增加两个叶子结点时,这两个叶子结点的层号都是t+1,对于公式的变化,是减少了一个原来的叶子结点,增加了两个新叶子结点,反映到公式中,因为2-(t-1)=2-(t+1-1)+2-(t+1-1),所以结果不变,这就证明当i=n时公式仍成立。证

22、毕30结点数的最大值2h-1(满二叉树),最小值2h-1(第一层根结点,其余每层均两个结点)。31(1)k(u-1)+1+i (2) (v-2)/k+1 (参见第8题推导)32该二叉树是按前序遍历顺序编号,以根结点为编号1,前序遍历的顺序是“根左右”。33(1)设n=1,则e=0+2*1=2(只有一个根结点时,有两个外部结点),公式成立。 设有n个结点时,公式成立,即 En=In+2n (1)现在要证明,当有n+1个结点时公式成立。增加一个内部结点,设路径长度为l,则 In+1=In+l (2) 该内部结点,其实是从一个外部结点变来的,即这时相当于也增加了一个外部结点(原外部结点变成内部结点时

23、,增加两个外部结点),则 En+1=En+l+2 (3) 由(1)和(2),则(3)推导为 En+1=In+2n+l+2=In+1-l+2n+l+2 =In+1+2(n+1) 故命题成立(2)成功查找的平均比较次数s=I/n不成功查找的平均比较次数u=(E-n)/(n+1)=(I+n)/n+1由以上二式,有s=(1+1/n)*u-1 。34该有向图只有一个顶点入度为0,其余顶点入度均为1,它不是有向树。 35题图36参见26题37由于二叉树前序遍历序列和中序遍历序列可唯一确定一棵二叉树,因此,若入栈序列为1,2,3,n,相当于前序遍历序列是1,2,3,n,出栈序列就是该前序遍历对应的二叉树的中

24、序序列的数目。因为中序遍历的实质就是一个结点进栈和出栈的过程,二叉树的形态确定了结点进栈和出栈的顺序,也就确定了结点的中序序列。下图以入栈序列1,2,3,(解释为二叉树的前序序列)为例,说明不同形态的二叉树在中序遍历时栈的状态和访问结点次序的关系: 栈状态 访问 空 1 1 2 1 2 3 1 2 3 1 2 空 1栈状态 访问空11 21 21 31 3空 1栈状态 访问空11 21 2空 13 空 3栈状态 访问空1空 122 32 3空 2栈状态 访问空1空 12空 23空 338给定二叉树结点的前序序列和对称序(中序)序列,可以唯一确定该二叉树。因为前序序列的第一个元素是根结点,该元素

25、将二叉树中序序列分成两部分,左边(设l个元素)表示左子树,若左边无元素,则说明左子树为空;右边(设r个元素)是右子树,若为空,则右子树为空。根据前序遍历中“根左子树右子树”的顺序,则由从第二元素开始的l个结点序列和中序序列根左边的l个结点序列构造左子树,由前序序列最后r个元素序列与中序序列根右边的r个元素序列构造右子树。由二叉树的前序序列和后序序列不能唯一确定一棵二叉树,因无法确定左右子树两部分。例如,任何结点只有左子树的二叉树和任何结点只有右子树的二叉树,其前序序列相同,后序序列相同,但却是两棵不同的二叉树。39前序遍历是“根左右”,中序遍历是“左根右”,后序遍历是“左右根”。三种遍历中只是访问“根”结点的时机不同,对左右子树均是按左右顺序来遍历的,因此所有叶子都按相同的相对位置出现。40在第38题,已经说明由二叉树的前序序列和中序序列可以确定一棵二叉树,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1