#GESP260606T2. 【GESP26年6月六级】判断题(每题 2 分,共 20 分)
第 16 题 C++ 中构造函数可以声明为虚函数,从而实现运行时多态。( )
{{ select(16) }}
- 对
- 错
第 17 题 通过指向 Base 的指针删除 Derived 对象时,一定会先调用 Derived 的析构函数,再调用 Base 的析构函数。
#include <iostream>
using namespace std;
class Base {
public:
~Base() {
cout << "Base destructor" << endl;
}
};
class Derived : public Base {
public:
~Derived() {
cout << "Derived destructor" << endl;
}
};
int main() {
Base* p = new Derived();
delete p;
return 0;
}
( )
{{ select(17) }}
- 对
- 错
第 18 题 在C++ STL 中,stack 的 pop() 函数会返回栈顶元素并将其删除。( )
{{ select(18) }}
- 对
- 错
第 19 题 程序运行后会输出 2 。
int main() {
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
q.pop();
cout << q.front() << endl;
return 0;
}
( )
{{ select(19) }}
- 对
- 错
第 20 题 下列函数试图将整数 x 插入到一棵二叉搜索树中。假设二叉搜索树满足如下性质:对于任意结点,左子树中所有结点的值均小于该结点的值,右子树中所有结点的值均大于或等于该结点的值。判断该函数是否能够在插入后保持二叉搜索树性质。
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
TreeNode* insertNode(TreeNode* root, int x) {
if (root == nullptr) {
return new TreeNode(x);
}
if (x < root->val) {
root->right = insertNode(root->right, x);
} else {
root->left = insertNode(root->left, x);
}
return root;
}
( )
{{ select(20) }}
- 对
- 错
第 21 题 哈夫曼编码一定是等长编码,且频率越高的字符编码越短。( )
{{ select(21) }}
- 对
- 错
第 22 题 有完全二叉树共有 n 个结点,其层数至少为 ⌈log₂(n + 1)⌉。则高度为 3 的满二叉树有 2³ - 1 = 7 个结点,但高度为 3 的完全二叉树最少有 2 × 3 - 1 = 5 个结点。( )
{{ select(22) }}
- 对
- 错
第 23 题 下列代码可以正确地按层序遍历输出二叉树的节点值。
void printLevelOrder(TreeNode* root) {
if (!root) return;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int sz = q.size();
for (int i = 0; i < sz; ++i) {
TreeNode* node = q.front();
q.pop();
if (cur->left) q.push(cur->left);
if (cur->right) q.push(cur->right);
}
cout << endl;
}
}
( )
{{ select(23) }}
- 对
- 错
第 24 题 模拟栈来进行二叉树的前序遍历时,若有节点出栈打印,需要先将它的右子节点入栈,再将左子节点入栈。( )
{{ select(24) }}
- 对
- 错
第 25 题 动态规划问题需要同时满足最优子结构和无后效性两个条件,并且还需要有重叠子问题。( )
{{ select(25) }}
- 对
- 错