Appearance
附录 B · 高频考点 · 易错点 · 速查总表
本附录把六级六章的「考点总结表」聚合为一张总表,并补充跨章易错点与考前速查卡。 星级说明:⭐⭐⭐⭐⭐ 必考压轴;⭐⭐⭐⭐ 高频;⭐⭐⭐ 中频;⭐⭐ 了解。
一、五星考点 TOP 榜(必看必背)
| # | 考点 | 出处 | 一句话记忆 |
|---|---|---|---|
| 1 | 二叉树性质 n₀ = n₂ + 1 | 第 2 章 | 叶子数 = 度为 2 的节点数 + 1 |
| 2 | 前序 + 中序 → 还原二叉树 | 第 2 章 | 前序找根,中序分左右,递归下去 |
| 3 | 哈夫曼树构造与 WPL | 第 3 章 | 每次取最小的两个合并;WPL = 非叶节点权之和 |
| 4 | 完全二叉树父子编号:左 2i、右 2i+1、父 ⌊i/2⌋ | 第 3 章 | 数组存树就靠它 |
| 5 | BST 中序遍历 = 升序 | 第 3 章 | 判断一棵树是不是 BST 的最快方法 |
| 6 | DFS vs BFS 选择:求最短 → BFS | 第 4 章 | 层序扩散,第一次到达即最短 |
| 7 | visited 标记 | 第 4 章 | 忘记标记 = 死循环 / 重复访问 |
| 8 | 01 背包一维必须逆序 | 第 5 章 | 顺序就变成完全背包 |
| 9 | 构造:父 → 子;析构:子 → 父 | 第 6 章 | 顺序题必考 |
| 10 | 多态三条件:virtual + 重写 + 父类指针/引用 | 第 6 章 | 少一个就不是多态 |
| 11 | 循环队列判满:(rear+1) % size == front | 第 7 章 | 牺牲一个存储位换"空满可分辨" |
| 12 | 循环队列元素个数:(rear - front + size) % size | 第 7 章 | 加 size 再取模,防负数 |
二、逐章考点 · 易错点总表
1. 第 2 章 树的基本概念与遍历
| 考点 | 星级 | 出题形式 | 易错点 |
|---|---|---|---|
| 树的基本术语(根、叶、度、深度) | ⭐⭐⭐ | 选择/填空 | 深度和高度搞混 |
| 树的性质:n 节点 n−1 条边 | ⭐⭐⭐ | 选择/判断 | 公式记错 |
| 二叉树定义(度 ≤ 2,左右有序) | ⭐⭐⭐⭐ | 选择/判断 | 左右子树有顺序 |
| 满二叉树 vs 完全二叉树 | ⭐⭐⭐⭐ | 选择/判断 | 谁是谁的子集搞反 |
| n₀ = n₂ + 1 | ⭐⭐⭐⭐⭐ | 选择/计算 | 高频,公式记牢 |
| 第 i 层最多 2^(i−1) 个节点 | ⭐⭐⭐⭐ | 选择/计算 | 注意是"第 i 层"不是深度 k |
| 深度 k 最多 2^k − 1 个节点 | ⭐⭐⭐⭐ | 选择/计算 | 与上一条区分 |
| 三种递归遍历(前/中/后序) | ⭐⭐⭐⭐⭐ | 选择/程序阅读/代码填空 | 遍历顺序记混 |
| 层序遍历(队列实现) | ⭐⭐⭐⭐ | 选择/程序阅读 | 用队列不是栈 |
| 前序 + 中序还原二叉树 | ⭐⭐⭐⭐⭐ | 选择/程序填空(压轴) | 找根、分左右的过程 |
| 后序 + 中序还原二叉树 | ⭐⭐⭐⭐⭐ | 选择/程序填空 | 后序最后一个是根 |
| 完全二叉树深度公式 | ⭐⭐⭐⭐ | 选择/计算 | ⌊log₂n⌋ + 1 |
2. 第 3 章 哈夫曼树与特殊树
| 考点 | 星级 | 出题形式 | 易错点 |
|---|---|---|---|
| 哈夫曼树构造过程 | ⭐⭐⭐⭐⭐ | 选择/计算 | 每次选最小的两个合并 |
| WPL 计算 | ⭐⭐⭐⭐⭐ | 选择/计算 | 权×深 或 非叶节点和(两种等价) |
| 哈夫曼树特点(无度 1 节点) | ⭐⭐⭐⭐ | 选择/判断 | 总节点数 = 2n − 1 |
| 哈夫曼编码(前缀编码) | ⭐⭐⭐⭐ | 选择/判断 | 左 0 右 1;高频编码短 |
| 完全二叉树定义 | ⭐⭐⭐⭐ | 选择/判断 | 和满二叉树的关系 |
| 完全二叉树父子编号关系 | ⭐⭐⭐⭐⭐ | 选择/计算 | 左 2i、右 2i+1、父 ⌊i/2⌋ |
| 完全二叉树深度 | ⭐⭐⭐⭐ | 选择/计算 | ⌊log₂ n⌋ + 1 |
| BST 定义(左小右大) | ⭐⭐⭐⭐⭐ | 选择/判断 | 是"所有"左子树节点都小 |
| BST 中序遍历 = 升序 | ⭐⭐⭐⭐⭐ | 选择/程序阅读 | 高频,必须记住 |
| BST 删除操作 | ⭐⭐⭐⭐ | 选择/代码填空 | 两孩情况找替代(右最左 / 左最右) |
| 格雷码生成公式 | ⭐⭐⭐ | 选择/计算 | G(n) = n XOR (n >> 1) |
3. 第 4 章 搜索算法
| 考点 | 星级 | 出题形式 | 易错点 |
|---|---|---|---|
| DFS 核心思想 | ⭐⭐⭐⭐⭐ | 选择/判断 | 深度优先,一条路走到黑 |
| DFS 实现(递归 / 栈) | ⭐⭐⭐⭐⭐ | 代码填空/编程 | 递归终止条件 |
| BFS 核心思想 | ⭐⭐⭐⭐⭐ | 选择/判断 | 层序扩散,先近后远 |
| BFS 实现(队列) | ⭐⭐⭐⭐⭐ | 代码填空/编程 | 入队出队顺序 |
| DFS vs BFS 对比 | ⭐⭐⭐⭐⭐ | 选择/判断 | 最短路径用 BFS |
| 回溯法三步曲 | ⭐⭐⭐⭐ | 选择/编程 | 选择 → 递归 → 撤销 |
| visited 标记访问 | ⭐⭐⭐⭐⭐ | 代码填空 | 忘记标记导致死循环 |
| 方向数组 dx/dy | ⭐⭐⭐⭐ | 代码填空 | 边界判断不能少 |
| 最短路径(BFS) | ⭐⭐⭐⭐⭐ | 编程题 | dist 数组初始化为 −1 |
| 迷宫问题 | ⭐⭐⭐⭐⭐ | 编程题 | 边界 + 通路 + 未访问,三条件缺一不可 |
| 二叉树 DFS 遍历 | ⭐⭐⭐⭐ | 选择/程序阅读 | 前中后序 |
| 二叉树 BFS 层序 | ⭐⭐⭐⭐ | 选择/程序阅读 | 队列实现 |
4. 第 5 章 简单动态规划
| 考点 | 星级 | 出题形式 | 易错点 |
|---|---|---|---|
| DP 两个核心要素 | ⭐⭐⭐⭐⭐ | 选择/判断 | 最优子结构 + 重叠子问题 |
| DP vs 贪心 | ⭐⭐⭐⭐ | 选择/判断 | 贪心不回头,DP 考虑所有选择 |
| DP 解题四步骤 | ⭐⭐⭐⭐⭐ | 编程题 | 定状态 → 找转移 → 定初始 → 定顺序 |
| 爬楼梯(一维 DP) | ⭐⭐⭐⭐ | 选择/程序阅读 | 斐波那契变形,初始条件 |
| 最大子段和 | ⭐⭐⭐⭐⭐ | 选择/编程 | 答案是 dp 数组最大值,不是最后一个 |
| 数字三角形(二维 DP) | ⭐⭐⭐⭐ | 编程题 | 边界处理,转移方程 |
| 01 背包二维转移 | ⭐⭐⭐⭐⭐ | 选择/编程 | dp[i][j] = max(选, 不选) |
| 01 背包空间优化(一维逆序) | ⭐⭐⭐⭐⭐ | 代码填空/编程 | 逆序!防止重复选 |
| 完全背包(一维顺序) | ⭐⭐⭐⭐ | 选择/编程 | 顺序!允许重复选 |
| 01 背包 vs 完全背包 | ⭐⭐⭐⭐⭐ | 选择/判断 | 遍历方向的区别 |
| 滚动数组优化 | ⭐⭐⭐ | 选择/代码填空 | 只用一行,反复利用 |
5. 第 6 章 面向对象编程基础
| 考点 | 星级 | 出题形式 | 易错点 |
|---|---|---|---|
| 面向对象三大特性 | ⭐⭐⭐⭐⭐ | 选择/判断 | 封装、继承、多态 |
| 类与对象的关系 | ⭐⭐⭐⭐ | 选择/判断 | 类是模板,对象是实例 |
| 访问控制 public/private/protected | ⭐⭐⭐⭐⭐ | 选择/判断/代码填空 | class 默认 private,struct 默认 public |
| 封装的意义 | ⭐⭐⭐ | 选择/判断 | 隐藏实现,暴露接口 |
| 构造函数 | ⭐⭐⭐⭐⭐ | 选择/程序阅读 | 对象创建时自动调用 |
| 析构函数 | ⭐⭐⭐⭐ | 选择/程序阅读 | 对象销毁时自动调用;写作 ~类名() |
| 继承的概念 | ⭐⭐⭐⭐ | 选择/判断 | 子类复用父类代码 |
| 构造 / 析构顺序 | ⭐⭐⭐⭐⭐ | 选择/程序阅读 | 构造:父→子;析构:子→父 |
| 多态的三个条件 | ⭐⭐⭐⭐⭐ | 选择/判断 | virtual + 重写 + 父类指针/引用 |
| 动态绑定 vs 静态绑定 | ⭐⭐⭐⭐ | 选择/判断 | 多态是动态绑定(运行时) |
| this 指针 | ⭐⭐⭐⭐ | 选择/代码填空 | 指向当前对象;静态成员函数没有 this |
| 初始化列表 | ⭐⭐⭐ | 选择/代码填空 | 构造函数冒号后面的部分 |
6. 第 7 章 栈与队列
| 考点 | 星级 | 出题形式 | 易错点 |
|---|---|---|---|
| 栈的特性(LIFO) | ⭐⭐⭐⭐⭐ | 选择/判断 | 和队列搞反 |
| 队列的特性(FIFO) | ⭐⭐⭐⭐⭐ | 选择/判断 | 和栈搞反 |
| 栈的基本操作 push/pop/top | ⭐⭐⭐⭐ | 选择/代码填空 | pop 不返回值,要先 top |
| 队列的基本操作 push/pop/front | ⭐⭐⭐⭐ | 选择/代码填空 | pop 不返回值,要先 front |
| 循环队列判空判满 | ⭐⭐⭐⭐⭐ | 选择/代码填空 | 空 front==rear;满 (rear+1)%size==front |
| 循环队列元素个数 | ⭐⭐⭐⭐⭐ | 选择/计算 | (rear − front + size) % size |
| 循环队列指针变化 | ⭐⭐⭐⭐⭐ | 代码填空/选择 | 取模:(x+1) % maxSize |
| 牺牲一个存储位 | ⭐⭐⭐⭐ | 选择/判断 | 用来区分空和满 |
| 栈的应用(括号匹配、表达式求值) | ⭐⭐⭐⭐⭐ | 编程题/选择 | 右操作数先弹出 |
| 队列的应用(BFS、层序遍历) | ⭐⭐⭐⭐ | 选择/编程 | BFS 用队列 |
| 优先队列大小顶堆 | ⭐⭐⭐⭐ | 选择/代码填空 | 默认大顶堆;greater<int> 是小顶堆 |
| 中缀转后缀(调度场算法) | ⭐⭐⭐ | 选择/程序阅读 | 运算符优先级 |
三、选择题 / 判断题「陷阱」20 条
- 「深度」从 1 开始数还是从 0 开始数——看清题目给的定义,别默认。
- 完全二叉树不一定是满二叉树;满二叉树一定是完全二叉树。
n₀ = n₂ + 1只对二叉树成立,普通树没有这个性质。- 前序 + 后序不能唯一确定一棵二叉树(必须配中序)。
- 哈夫曼树的 WPL 有两种算法(权×路径长度之和 / 非叶节点权之和),答案相同。
- 哈夫曼编码是前缀编码:任何一个编码都不是另一个的前缀。
- BST 的中序遍历递增;如果题目给的是降序,那它就不是 BST。
- BST 删除有两孩节点时,替代节点是右子树最小或左子树最大。
- 格雷码
G(n) = n ^ (n >> 1),相邻两个码只差一位。 - DFS 用栈(递归栈),BFS 用队列——程序填空题常在这里设陷阱。
- BFS 求最短路只对无权图 / 边权相同成立,带权图要 Dijkstra(📚 超纲)。
visited标记要在入队时做,不是在出队时做(否则同一节点会重复入队)。- 回溯=选择 → 递归 → 撤销。忘记撤销是新手第一大坑。
- 最大子段和的答案是
max(dp),不是dp[n−1]。 - 01 背包一维优化倒序;完全背包一维优化正序——方向写反整题皆错。
class默认 private,struct默认 public(选择题高频)。- 构造顺序 父→子,析构顺序 子→父(对称,别记反)。
- 多态必须满足三个条件,缺
virtual就变成静态绑定。 pop()不返回栈顶元素,必须先top()再pop()。- 循环队列牺牲一个存储位后,容量为
size − 1,不是size。
四、考前 30 分钟速查卡
【树】 n 节点 n−1 边;二叉树 n₀ = n₂ + 1
第 i 层最多 2^(i−1);深度 k 最多 2^k − 1
遍历:前 根左右 / 中 左根右 / 后 左右根 / 层序 用队列
【哈夫曼】 每次取最小两个合并;WPL = Σ(权×深) = 非叶节点权之和
节点总数 2n−1;无度为 1 的节点
【完全二叉树】左孩子 2i、右孩子 2i+1、父 ⌊i/2⌋;深度 ⌊log₂n⌋+1
【BST】 左 < 根 < 右(全体);中序 = 升序;删除两孩找替代
【格雷码】 G(n) = n ^ (n>>1)
【搜索】 DFS 递归/栈(一条路走到黑);BFS 队列(层序,最短路)
回溯三步:选择 → 递归 → 撤销;visited 入队即标记
【DP】 四步:定状态 → 找转移 → 定初始 → 定顺序
最大子段和:答案是 max(dp)
01 背包:一维 + 倒序;完全背包:一维 + 正序
【OOP】 封装 / 继承 / 多态;class 默认 private
构造 父→子,析构 子→父;多态 = virtual + 重写 + 父类指针
【栈队列】 栈 LIFO,队列 FIFO;pop() 不返回值
循环队列:空 front==rear;满 (rear+1)%size==front
元素个数 = (rear − front + size) % size
【考试】 单选 15×2 + 判断 10×2 + 编程 2×25 = 100 分,180 分钟本表由各章「考点总结表」聚合而成;若与正文冲突,以正文最新修订为准(见附录 E)。
