算法与数据结构(C++语言版)(冯广慧第2版)习题及答案 第6章课后习题答案.docx

算法与数据结构(C++语言版)(冯广慧第2版)习题及答案 第6章课后习题答案.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE PAGE 4 习题答案 一、选择 1-5:BCCCB 6-10:BBBDC 11-15:CDACD 16:C 二、填空 1、(1)2H-1 (2)2H-1 (3)H=?log2N?+1 2、(1)0 (2)(n-1)/2或?n/2? (3)(n+1)/2 (4) log2(n+1) 3、(1) n1-1 (2)n2+n3 4、(1)2k-2+1(第k层1个结点,总结点个数是2H-1,其双亲是2H-1/2=2k-2)(2) ?log2i?+1 5、?n/2? 6、(1)a (2) dbe (3) hfcg 7、cedba 8、(1)前驱 (2)后继 三、判断题 1-8:错对对对对对错错 四、应用题 1、设树的结点数为n,分枝数为B,则下面二式成立 n=n0+n1+n2+…+nm (1) n=B+1= n1+2n2+…+mnm (2) 由(1)和(2)得叶子结点数: 2、提示:tLR LtR LRt 若先序序列与后序序列相同,则或为空树,或为只有根结点的二叉树; 若中序序列与后序序列相同,则或为空树,或为任一结点至多只有左子树的二叉树; 若先序序列与中序序列相同,则或为空树,或为任一结点至多只有右子树的二叉树; 若中序序列与层次遍历序列相同,则或为空树,或为任一结点至多只有右子树的二叉树。 3 A,B,F,J E,D,H C,K,G 4、 5、 (1) 中序:DBCEAF 后序:DECBFA (2) aa aa aa aa aa aa aa A B F D C E 6、【提示】森林的先序和后序分别对应二叉树的先序和中序,先构造二叉树,然后转换成森林 FA F A E B D C J H G I K O N L MG 7、 (1)先序序列:A B C D E F G H I J后序序列:B C D A F E H J I G (2) (3)后序序列:DCBFJIHGEA 8、 A A B F D (3) C E H G (1) (2) 9、 (1)正则k叉树只含有两类结点:叶结点(n0个)和度为k的分支结点(nk个)。树T中的结点总数n=n0+nk=n0+m,树中所含的分支数b=n-1,这些分支均为度为k的结点发出的,即b=m*k,故n0=(k-1)*m+1 (2) 高度为h的正则k叉树T中,含最多结点的树形为:除第h层外,第1到第h-1层的结点都是度为k的分支结点,而第h层均为叶结点,即树是“满”树。此时第j(1=j=h)层结点数为kj-1,结点总数M1为:(k^h-1)/(k-1) 含最少结点的正则k叉树的树形为:第1层只有根结点,第2到第h-1层仅含1个分支结点和k-1个叶结点,第h层有k个叶结点。即除根外第2层到第h层中每层的结点数均为k,故T中所含结点总数M2为:k(h-1)+1 五、算法设计题 1、 【题目分析】结点计数可以在遍历中解决。根据“访问根结点”在“递归遍历左子树”和“递归遍历右子树”中位置的不同,而有前序、后序和中序遍历。 // 设置三个全局变量,分别记度为2,1和叶子结点的个数 int n2,n1,n0; void Count(BiTree t) { if(t) { if(t-left t-right) n2++; else if(t-left !t-right || !t-left t- right)n1++; else n0++; if(t-left!=null) Count(t-left); if(t-right!=null) Count(t-right); } } 2、 从根节点的左右子树进行交换,然后以根节点的左子树为根节点,而后以根节点的右结点为根节点,进行左右子树交换。遇到空节点或叶节点直接返回。下面求二叉树镜像的函数代码实现: templateclass T void BinaryLinkList T::MirroTree(Node * root) { ??if (root == NULL) return; ??if (root-left == NULL root-right == NULL) return; ??else ??{ ????TreeNode* temp = root-left; ????root-left = root-right; ????root-right = temp; ??} ??

您可能关注的文档

文档评论(0)

balala11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档