当前位置:   article > 正文

数据结构与算法:第二次作业——递归、树、图【考点罗列//错题正解//题目解析】_创建线索二叉树时不需要进行递归遍历,从而节省了时间

创建线索二叉树时不需要进行递归遍历,从而节省了时间

目录

一、选择题

——递归——

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.【填空题】——二叉树:链式存储结构的指针域数目求解

42.【填空题】 ——二叉树:指定结点的右孩子结点

43.【填空题】——哈夫曼树:求带权路径长度

44.【填空题】——哈夫曼树:结点数目

*45.【填空题】 ——字符的哈夫曼编码

——图——

46.【填空题】——图的相关知识点

47.【填空题】——图:邻接表存储结构的构成部分

48.【填空题】——图:遍历方法

49.【填空题】——生成树的边数求解

50.【填空题】——最小生成树的算法


一、选择题

——递归——

1.【单选题】 ——递归的相关知识点

以下关于递归的说法中,哪一项是不正确的?(D

A.数据结构中部分地包含其自身,则此数据结构是递归的。

B.函数内部调用其自身,则此函数是递归的。

C.递归调用语句出现在递归函数中的最后一句,则此递归调用称为尾递归。

D.如果函数中没有出现对其自身的调用语句,则该函数一定不是递归的函数。

选项D:如果函数p调用函数q,而q又调用p,即便函数 p没有出现对自身的调用,但是函数p在调用函数q的过程中间接调用了自己本身,这称之为间接递归。

2.【单选题】——递归的应用

以下哪一项应用问题与递归无关?(D )。

A.求正整数n的阶乘

B.查找单链表最后一个结点

C.求解汉诺塔问题

D.打印机任务调度

选项D:个人理解的话,因为打印机的任务调度是”先进先出“,也就是队列的问题,而递归程序的实现是基于数据结构:栈上的,所以排除D。其余三个选项都是递归的相关应用

3.【单选题】——递归的实现结构

递归程序的实现需要使用以下哪一种数据结构?( C)。

A.顺序表

B.链表

C.栈

D.队列

栈的一个重要应用是:在程序设计语言中实现递归算法

4.【单选题】——递归的执行与实现 

以下关于递归的执行与实现的说法中,哪一项是不正确的?( C)。

A.递归的执行是一个把“大问题”分解为“小问题”,再反向求解的过程。

B.为避免递归程序无限执行,在满足特定条件时,将不再进行递归调用。

C.每一次递归调用时,都会在存储空间单独放置一份递归调用的程序代码。

D.当发生一次递归调用时,在递归工作栈执行的是“入栈”操作。

选项A:在这里涉及到“递归模型”。一个递归出口,一个递归体。递归算法实际上就是将一个复杂问题的描述与求解过程变得简洁明了,也就是“大问题”化“小问题”,再反向求解。具体可看29题的一个推导过程

  • 递归体表示“大问题”与“小问题”的关系。
  • 递归出口为“最小问题”,分解到最小问题的时候,再将其重新带回递归体,最终就是“最大问题”的结果。

选项B:从递归模型就可知,当满足特定的终止条件时,递归算法也就随之结束了。

选项C:递归调用的程序代码只有一份,每次调用的操作数、局部变量等都会分配新的空间。

选项D:这里涉及到递归工作栈。在递归的层层分解过程中,也就是每发生一次递归调用,“这一次”的参数以及对应的函数返回地址就会进行入栈操作,直到遇到“递归出口”的 条件,栈达到最顶层,对应存放元素是递归出口条件对应的返回值。这样在将大问题拆分为小问题后,才能再“原路返回”,求得最终的值。因此每一次的递归调用就相当于一次“入栈”,以便下一层返回值时重新使用它们。

5.【单选题】 ——递归算法

以下关于递归算法与非递归算法的说法中,哪一项是不正确的?( C)。

A.递归算法可转换为非递归算法。

B.尾递归算法可转换为使用循环语句实现的算法。

C.递归算法的时间效率比使用循环语句实现的算法高。

D.递归算法的空间效率比使用循环语句实现的算法低。

选项A:求解问题的过程中,当然可以先使用递归算法分析问题,然后通过将递归算法转化为非递归算法,再进行问题的求解

选项B:这里补充《转换方法》

直接转化:尾递归,可用循环结构的算法替代。

间接转化:

  • 需要使用栈:自己用栈模拟系统的运行时栈,通过分析只保存必须保存的信息。
  • 需要使用系统栈:利用系统栈保存参数。由于系统不了解程序的业务逻辑,仅从技术上转换,有可能保存不必要的信息。

选项C:不一定。递归算法的基本特性中讲到,递归算法本身时间效率通常比较差。求解某些问题时,先用递归算法分析问题,再用非递归算法具体求解问题。需要把递归算法转换为非递归算法。

选项D:这是因为递归算法在执行过程中需要不断地将函数的参数、局部变量和返回地址等信息保存在递归工作栈中,而每次递归调用都会占用额外的内存空间。与此相比,使用循环语句实现的算法则不需要保存函数调用的相关数据,它只需要保存循环控制变量和一些局部变量,因此在空间上更加高效。

——树——

6.【单选题】 ——树的结构

以下哪一项应用问题与树的结构无关?( C)。

A.HTML代码解析

B.公司组织结构安排

C.两个有序表合并

D.文件系统中文件夹与文件的存储

【这道题就针对选项A和C进行解释】

选项A:HTML代码解析通常涉及标签的嵌套和结构,这与树的结构有关。在HTML中,标签的嵌套关系可以用树的结构来表示,因此与树的结构有关。

选项C:在合并两个有序表的过程中,我们只需要比较两个表中的元素大小,并按照顺序将它们合并成一个新的有序表。这个过程并不需要使用树的结构或者树相关的算法

*7.【单选题】——树的知识点 

 以下关于树和二叉树的说法中,正确的是?(A )。C

A.树中同一层次的结点互为兄弟结点。

B.二叉树是度为2的有序树。

C.满二叉树一定是完全二叉树。

D.已知二叉树的结点总数,可求得其深度。

【在做题的时候,这道题尤其考虑了很久,感觉模棱两可的选项,但是一对答案反倒是想了起来,当时排除C是被自己绕了进去,从“一定是”纠结到“充要”的关系,最后反推完全二叉树不一定就能推出是满二叉树,因此排除(被自己整笑了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/64255
推荐阅读
相关标签