)
一、判断题、第1题1、题目class Point { public: double x, y; Point(double px, double py) : x(px), y(py) {} void print() { cout ( x , y ); } }; int main() { Point a(3.0, 4.0); Point b; a.print(); }题目说Point b; 会调用编译器自动生成的默认构造函数程序可以正常运行。2、答案❌ 错3、为什么错1很多同学记住不写构造函数编译器会帮忙生成。2但是这里Point(double px,double py)已经写了构造函数。3编译器会认为作者已经自己设计好了出生方式4因此不会再帮你生成默认构造。5于是Point b;找不到Point()就报错。4、记忆口诀只要自己写了构造函数Point(int x)默认构造通常就没了。二、判断题、第2题1、题目子类无法直接访问父类私有成员。2、答案✅ 对3、故事讲解1爸爸class Father { private: int money; };2儿子class Son : public Father { };3儿子能不能money100;不能。4因为private只有自己能看。连儿子都不行。4、要想能怎么办爸爸开放接口public: int getMoney()儿子通过接口访问。所以题目正确。三、判断题、第3题1、题目给出的树1 / \ 2 3 / \ 4 5以及栈实现的遍历程序。题目说输出1 2 3 4 52、答案❌ 错3、为什么1代码if(cur-right) s.push(cur-right); if(cur-left) s.push(cur-left);2注意栈后进先出3压入顺序右 左4弹出顺序左 右5执行过程1 ↓ 2 ↓ 4 ↓ 5 ↓ 36输出1 2 4 5 3所以题目错误。四、判断题、第4题1、题目所有字符频率相同则哈夫曼树一定是完全二叉树。2、答案❌ 错3、举例15个字符A B C D E2频率1 1 1 1 13建哈夫曼树时最后可能出现高度不完全一致4、因此未必是完全二叉树。5、陷阱很多同学觉得频率一样 → 树一定很整齐这是错觉。五、判断题、第5题1、题目哈夫曼编码能够唯一解码因为叶子不会成为其他叶子的祖先。2、答案✅ 对3、什么叫前缀码1例如A 0 B 10 C 112注意0不是10的前缀。3因此01110可以唯一拆开。4这就是前缀编码4、哈夫曼树所有字符都在叶子结点因此不会出现某字符编码 是另一字符编码前缀的情况。所以正确。六、判断题第6题1、题目完全二叉树数组存储时右孩子下标一定是2*i22、答案✅ 对3、必背公式1根tree[0]2左孩子2*i13右孩子2*i24、例如下标 0 1 2 3 4 5 6这是完全二叉树经典考点。七、判断题、第7题1、题目非递归前序遍历时应该先压左孩子再压右孩子。2、答案❌ 错3、前序遍历1顺序根 左 右2栈后进先出3想让左边先出来。必须push(右) push(左)4这样左 先弹出4、题目说先左后右结果变成根 右 左错误。八、判断题、第8题1、题目递归前序遍历preorder(root) { preorder(root-left); preorder(root-right); }问时间复杂度 O(n)空间复杂度 O(n) 。2、答案正确✅️3、时间复杂度每个结点访问一次O(n)正确。4、空间复杂度递归栈深度1最坏链状树是O(n)2平衡树O(log n)3题目中说的是二叉树没说平衡二叉树空间复杂度O(n)九、判断题、第9题1、题目0-1背包把逆序改成正序仍正确。2、答案❌ 错3、为什么逆序10-1背包每件物品只能拿一次2逆序for(jW;jw[i];j--)保证当前物品不会重复使用。3如果改正序for(jw[i];jW;j)可能出现同一物品拿多次4就变成完全背包了。所以错误。十、判断题、第10题1、题目状态转移递推与记忆化搜索时间复杂度通常相同。2、答案✅ 对3、举例斐波那契1递推dp[i]dp[i-1]dp[i-2];2记忆化dfs(i)算过就存。3两者都只计算n个状态一次。4因此时间复杂度O(n)一样。判断题核心知识总结这一部分实际上考了 5 个重点第一类面向对象构造函数private权限继承对应第1题 第2题第二类树与遍历前序遍历栈模拟DFS数组存树对应第3题 第6题 第7题 第8题第三类哈夫曼树前缀编码完全二叉树误区对应第4题 第5题第四类背包DP逆序遍历对应第9题第五类记忆化搜索DFS缓存DP递推对应第10题