📜  数据结构和算法 |设置 1

📅  最后修改于: 2021-09-27 15:01:05             🧑  作者: Mango

以下问题已在 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 操作数量。