以下问题已在 GATE CS 考试中提出
1. 让 LASTPOST、LASTIN 和 LASTPRE 表示在后序、中序和前序遍历中访问的最后一个顶点。分别为一棵完全二叉树。以下哪项总是正确的? (GATE CS 2000)
(a) LASTIN = LASTPOST
(b) LASTIN = LASTPRE
(c) LASTPRE = LASTPOST
(d) 以上都不是
答案 (d)
假设给定的树是完全二叉树。对于完整的二叉树,最后访问的节点对于中序和前序遍历总是相同的。即使对于完整的二叉树,上述情况都不成立。
选项(a)是不正确的,因为在中序遍历中访问的最后一个节点是右子节点,而在后序遍历中访问的最后一个节点是根。
选项(c)是不正确的,因为前序遍历中访问的最后一个节点是右子节点,而后序遍历中访问的最后一个节点是根。
对于选项 (b),请参阅以下计数器示例。感谢 Hunaif Muhammed 提供正确的解释。
1
/ \
2 3
/ \ /
4 5 6
Inorder traversal is 4 2 5 1 6 3
Preorder traversal is 1 2 4 5 3 6
2.以下配对最合适的搭配
X: depth first search 1: heap
Y: breadth-first search 2: queue
Z: sorting 3: stack
是(GATE CS 2000):
(a) X—1 Y—2 Z-3
(b) X—3 Y—1 Z-2
(c) X—3 Y—2 Z-1
(d) X—2 Y—3 Z-1
答案:(c)
堆栈用于深度优先搜索
队列用于广度优先搜索
堆用于排序
3. 考虑以下二叉树的嵌套表示: (XYZ) 表示 Y 和 Z 分别是节点 X 的左子应力和右子应力。注意 Y 和 Z 可以为 NULL,或者进一步嵌套。以下哪项代表有效的二叉树?
(a) (1 2 (4 5 6 7))
(b) (1 (2 3 4) 5 6) 7)
(c) (1 (2 3 4)(5 6 7))
(d) (1 (2 3 NULL) (4 5))
答案 (c)
4. 让 s 是一个由 n 个整数组成的排序数组。让 t(n) 表示最有效的算法确定在 s 中是否有两个元素的总和小于 1000 所花费的时间。下面哪个描述是正确的? (GATE CS 2000)
a) t (n) 为 0 (1)
b) n < t (n) < n log 2 n
c) n log 2 n < t (n) < n C 2
d) t (n) = n C 2
答案(一)
让数组按升序排序,如果前两个元素之和小于 1000,则有两个元素之和小于 1000,否则没有。对于按降序排序的数组,我们需要检查最后两个元素。对于数组数据结构,两种情况下的操作次数都是固定的,不依赖于 n,复杂度为 O(1)
5. B+ 树在数据库中比二叉树更受欢迎,因为 (GATE CS 2000)
(a) 磁盘容量大于内存容量
(b) 磁盘访问比内存访问慢得多
(c) 磁盘数据传输率远低于内存数据传输率
(d) 磁盘比内存更可靠
答案(二)
磁盘访问速度较慢,而 B+ 树提供的磁盘命中次数较少。这主要是因为与二叉搜索树不同,B+ 树具有非常高的扇出(通常为 100 或更多),这减少了在树中查找元素所需的 I/O 操作数量。