Description
# 一、单选题(每题 2 分,共 30 分)
1. 在构建哈夫曼树时,每次应该选择( )合并。
- 最小权值的节点
- 最大权值的节点
- 随机节点
- 深度最深的节点
2. 面向对象的编程思想主要包括以下哪些原则( )?
- 贪心、动态规划、回溯
- 并发、并行、异步
- 递归、循环、分治
- 封装、继承、多态
3. 在队列中,元素的添加和删除是按照( )原则进行的。
- 先进先出
- 先进后出
- 最小值先出
- 随机进出
4. 给定一个简单的类定义如下,( )语句在类的外部正确地创建了一个`Circle`对象并调用了 getArea 函数?

- `Circle c = Circle(5.0); c.getArea(c);`
- `Circle c(5.0); getArea(c);`
- `Circle c = new Circle(5.0); c.getArea();`
- `Circle c(5.0); c.getArea();`
5. 已知字符 `0` 的ASCII编码的十进制表示为48,则执行下面C++代码后,输出是( )

- `target left`
- `target val`
- `target > root->val`
- `target > root->left`
6. 3 位格雷编码的正确顺序是( )。
- 000, 001, 010, 011, 100, 101, 110, 111
- 000, 001, 011, 010, 110, 111, 101, 100
- 000, 010, 001, 011, 100, 110, 101, 111
- 000, 010, 110, 100, 111, 101, 011, 001
7. 以下动态规划算法的含义与目的是( )。
```cpp
int function(vector& nums) {
int n = nums.size();
if (n == 0)
return 0;
if (n == 1)
return nums[0];
vector dp(n, 0);
dp[0] = nums[0];
dp[1] = max(nums[0], nums[1]);
for (int i = 2; i next = next; 应该改为 current->next = prev;`
- `ListNode* next = current->next; 应该改为 ListNode* next = prev->next;`
- `current != nullptr 应该改为 current->next != nullptr`
- `ListNode* prev = nullptr; 应该改为 ListNode* prev = head;`
# 二、判断题(每题 2 分,共 20 分)
16. 哈夫曼树是一种二叉树。
- 正确
- 错误
17. 在动态规划中,状态转移方程的作用是定义状态之间的关系。
- 正确
- 错误
18. 继承是将已有类的属性和方法引入新类的过程。
- 正确
- 错误
19. 完全二叉树的任意一层都可以不满。
- 正确
- 错误
20. 删除单向链表中的节点,只需知道待删除节点的地址即可,无需访问前一个节点。
- 正确
- 错误
21. 在宽度优先搜索中,通常使用队列来辅助实现。
- 正确
- 错误
22. 哈夫曼编码的主要应用领域是有损数据压缩。
- 正确
- 错误
23. 二叉搜索树的查找操作的时间复杂度是$O(N)$。
- 正确
- 错误
24. 栈的基本操作包括入栈(push)和出栈(pop)。
- 正确
- 错误
25. 使用哈夫曼编码对一些字符进行编码,如果两个字符的频率差异最大,则它们的编码可能出现相同的前缀。
- 正确
- 错误
Source
GESP