1.简单
二叉树的后序遍历按什么顺序访问节点?
- A先节点,再左子树,最后右子树
- B先左子树,再节点,最后右子树
- C先左子树,再右子树,最后节点
- D先右子树,再节点,最后左子树
2.简单
哪种数据结构最适合实现文本编辑器中的"撤销"(undo)功能?
- A栈
- B哈希集合
- C队列
- D图
3.简单
一棵有 n 个节点的树有多少条边?
- An − 1
- Bn + 1
- Cn
- D2n
4.中等
在平衡二叉搜索树中查找一个键的时间复杂度是多少?
- AO(n)
- BO(n log n)
- CO(1)
- DO(log n)
5.中等
在一个有 n 个元素的数组中间插入一个元素,代价是多少?
- AO(n²),因为每个元素要移动 n 次
- BO(1),因为下标已知
- CO(log n),因为使用二分查找
- DO(n),因为后面的元素必须移动
6.中等
在二叉最小堆中,extract-min 是如何工作的?
- A把最后一个元素移到根上,再将其下沉
- B删除根,并把所有元素左移一位
- C在所有叶子中查找新的最小值
- D删除数组的最后一个元素
7.困难
采用按秩合并(union by rank)和路径压缩(path compression)的并查集(union-find,不相交集合),每次操作的均摊代价为:
- AO(n²)
- B恰好 O(log n)
- CO(α(n)),即反阿克曼函数,实际上可视为常数
- DO(n)
8.困难
与有序链表相比,跳表(skip list)的主要优势是什么?
- A利用多层前向指针,实现期望 O(log n) 的查找
- B它以无序方式存储键
- C它不占用额外内存
- D保证 O(1) 的查找,因为每个节点都存有指向其他所有节点的指针
答案
- 1. C · 先左子树,再右子树,最后节点
- 2. A · 栈
- 3. A · n − 1
- 4. D · O(log n)
- 5. D · O(n),因为后面的元素必须移动
- 6. A · 把最后一个元素移到根上,再将其下沉
- 7. C · O(α(n)),即反阿克曼函数,实际上可视为常数
- 8. A · 利用多层前向指针,实现期望 O(log n) 的查找
完整分步解答:请在 examproblems.com 上练习本主题。