文章目录
每日一练
4.1
- 若将一棵树T转化为对应的二叉树BT,则下列对BT的遍历中,其遍历序列与T的后根遍历序列相同的是()
A. 先序遍历
B. 中序遍历
C. 后序遍历
D. 按层遍历
【答案】B
【解析】后根遍历树可分为两步:① 从左到右访问双亲结点的每个孩子(转化为二叉树后就是先访问根结点再访问右子树);② 访问完所有孩子后再访问它们的双亲结点(转化为二叉树后就是先访问左子树再访问根结点)因此树T的后根序列与其相应的二叉树BT的中序遍历序列相同。
4.2
- 已知某二叉树的先序序列和中序序列分别为ABDEHCFIMGJKL和DBHEAIMFCGKLJ,请画出这棵二叉树,并画出二叉树对应的森林。
A A
/ \ / |
B C B E C
/ \ / \ 左孩子,右兄弟 / / /
D E F G <<=======>> D H F G J
/ / \ / \ / \
H I J I M K L
\ /
M K
\
L
4.3
- 下列语句片段的打印结果为()
int a = 10, b = 4, c = 20, d = 6;
System.out.println(a++*b+c*--d);
A. 144
B. 28
C. 140
D. 不能运行
【答案】C
【解析】++在前,先自增后运算;++在后,先运算后自增。
4.4
- MySQL数据库中5.5版本以前默认存储引擎是()5.5以后默认存储引擎是()
A. InnoDB
B. MyISAM
C. Memory
D. Merge
【答案】B、A
【解析】5.5版本以前默认 MyISAM 引擎,不支持事务;5.5版本以后默认 InnoDB 引擎,支持事务。
4.5
- 已知字符集{a,b,c,d,e,f,g,h},若各字符的哈夫曼编码依次是0100, 10, 0000, 0101, 001, 011, 11, 0001,则编码序列0100011001001011110101的译码结果是()。
A. acgabfh
B. adbagbb
C. afbeagd
D. afeefgd
【答案】D
【解析】0100 011 001 001 011 11 0101
4.6
- 已知字符集{a,b,c,d,e,f},若各字符出现的次数分别为6,3,8,2,10,4,则对应字符集中各字符的哈夫曼编码可能是()。
A. 00, 1011, 01, 1010, 11, 100
B. 00, 100, 110, 000, 0010, 01
C. 10, 1011, 11, 0011, 00, 010
D. 0011, 10, 11, 0010, 01, 000
【答案】A
【解析】根据出现的次数画出对应的哈夫曼树
33 33
/ \ / \ a: 00
14 19 14 19 b: 1011
/ \ / \ / \ / \ c: 01
⑥ ⑧ 9 ⑩ =======>>> a c 9 e ===>> d: 1010
/ \ / \ e: 11
④ 5 f 5 f: 100
/ \ / \
② ③ d b
4.7
- 在有 n 个结点的哈夫曼树中,非叶子结点的总数数()
A. n-1
B. n
C. 2n-1
D. 2n
【答案】A
【解析】n 个结点构造的哈夫曼树需要 n-1 次合并过程,每次合并新建一个分支节点,故选A。
4.8
- 对 n 个互不相同的符号进行哈夫曼编码,若生成的哈夫曼树共有 115 个结点,则 n 的值是()。
A. 56
B. 57
C. 58
D. 60
【答案】C
【解析】n 个符号构造哈夫曼树的过程中,共新建了 n-1 个结点(双分支结点),因此哈夫曼树的结点总数为2n-1 = 115,求解得到 n = 58,故选C。
4.9
- 设给定权集 w = {5, 7, 2, 3, 6, 8, 9},试构造关于 w 的一颗哈夫曼树,并求其加权路径长度 WPL。
【答案与解析】根据哈夫曼树的构造方法,每次从森林中选取两个根结点值最小的树合成一颗树,将原先的两棵树作为左、右子树,且新根结点的值为左、右孩子关键字之和。构造的哈夫曼树如下:
40
/ \
17 23
/ \ / \
⑧ ⑨ 10 13 ------- (8 + 9) * 2 = 34
/ \ / \
⑤ 5 ⑥ ⑦ ------- (5 + 6 + 7) * 3 = 54
/ \
② ③ ------- (2 + 3) * 4 = 20
WPL = 34 + 54 + 20 = 108
- 哈夫曼树并不唯一,但带权路径长度一定是相同的。
4.10
ArrayList list = new ArrayList(20);
中的list扩充几次()
A. 0
B. 1
C. 2
D. 3
【答案】A
【解析】这里有点迷惑人,大家都知道默认 ArrayList 的长度是 10,所以如果要往 list 添加 20 个元素,肯定要扩容一次(扩容为原来的 1.5 倍)但是这里显示指明了需要多少空间,所以就一次性为你分配了这么多空间,也就不用再扩容了。
4.11
- 关于以下代码说法正确的是()
public class NULL {
public static void haha() {
System.out.println("haha");
}
public static void main(String[] args) {
((NULL) null).haha();
}
}
A. 编译不通过
B. 运行不通过
C. 能正常打印“haha”
D. 能正常运行,但什么也不打印
【答案】C
【解析】输出为 haha,因为 null 值可以强制转换为任意 Java 类类型,(String)null 也是合法的。但 null 强制转换后是无效对象,其返回值还是为 null,而static方法的调用是和类名绑定的,不借助对象进行访问所以能正确输出。
4.12
- 一棵二叉树的先序遍历序列为E,F,H,I,G,J,K,中序遍历序列为H,F,I,E,J,K,G,则该二叉树根节点的右孩子是()。
A. E
B. F
C. G
D. H
【答案】C
【解析】根据先序和中序遍历的结果,可以画出该二叉树的结构如下。所以根节点是 E,根节点的右孩子是G。
E
/ \
F G
/ \ /
H I J
\
K
4.13
- 已知一算术表达式的中缀形式为A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为()
A. -A+B*C/DE
B. -A+B*CD/E
C. -+*ABC/DE
D. -+A*BC/DE
【答案】D
【解析】本题相当于给出树的中序遍历和后序遍历求前序遍历的结果。可以画出这棵树:
-
/ \
+ /
/ \ / \ ==>> 前序遍历:-+A*BC/DE
A * D E
/ \
B C
4.14
- 在一棵三叉树中,度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,则度为0的结点数为()个
A. 4
B. 5
C. 6
D. 7
【答案】C
【解析】设树的总结点数为n,度为i的结点数记为ni,则有 n = n0 + n1 + n2 + n3 和 n-1 = n1 + 2n2 + 3n3 那么有n0 = n2 + 2n3 + 1 = 1 + 2*2 + 1 = 6。
4.15
- 已知一棵完全二叉树的第六层(设根为第一层)有8个叶结点,则该完全二叉树的结点个数最多是()
A. 39
B. 52
C. 111
D. 119
【答案】C
【解析】第六层有8个叶子结点,说明第六层另外的32-8=24个结点不是叶子结点,每个结点最多有2个孩子结点,故结点总数为63+24*2=111个。
4.16
- 对于下列关键字序列,不可能构成某二叉排序树中一条查找路径的序列是()
A. 95, 22, 91, 24, 94, 71
B. 92, 20, 91, 34, 88, 35
C. 21, 89, 77, 29, 36, 38
D. 12, 25, 71, 68, 33, 34
【答案】A
【解析】由选项A做出查找路径的一部分,发现在91的左子树中出现了大于91的结点94,因此选项A不可能。
4.17
- ElasticSearch集群中主分片数量可以在后期更改吗?()
A. 可以
B. 不可以
【答案】B
【解析】不可以,因为根据路由算法shard=hash(document_id)%(num_of_primary_shards),当主分片数量变化时会影响数据被路由到哪个分片上,导致数据存储和查询都出现问题。
4.18
- Elasticsearch如何避免脑裂?()
A. 不需要设置
B. 设置最少投票通过数量大于候选节点数量的一半
C. 设置最少投票通过数量等于候选节点数量的一半
D. 设置最少投票通过数量小于候选节点数量的一半
【答案】B
【解析】可以通过设置最少投票通过数量(discovery.zen.minimum_master_nodes)超过所有候选节点一半以上来解决脑裂问题。
4.19
- 根据二叉树的定义,节点总数为3的二叉树共有()种?
A. 3
B. 4
C. 5
D. 6
【答案】C
【解析】我们使用完全二叉树的编号机制来描述二叉树上的节点。根节点设为1号节点,那么节点总数为3的二叉树可能有5种
① ① ① ① ①
/ \ / / \ \
② ③ ② ② ④ ④
/ \ / \
④ ⑤ ⑥ ⑦
4.20
- 将{5, 2, 7, 3, 4, 1, 6}依次插入初始为空的二叉搜索树。则该树的后序遍历结果是()。
A. 1, 2, 3, 4, 6, 7, 5
B. 1, 4, 2, 6, 3, 7, 5
C. 1, 4, 3, 2, 6, 7, 5
D. 5, 4, 3, 7, 6, 2, 1
【答案】C
【解析】
⑤
/ \
② ⑦
/ \ /
① ③ ⑥
\
④
4.21
- 若二叉搜索树是有N个结点的完全二叉树,N是大于1的奇数,则不正确的说法是()
A. 所有结点的平均查找效率是 O ( lg N ) O(\lg N) O(lgN)
B. 最小值一定在叶节点上
C. 最大值一定在叶节点上
D. 中位值节点在根节点或者根的左子树上
【答案】C
【解析】最大值可以是没有右子树的非叶节点。
4.22
- 将
{10, 12, 1, 14, 6, 5, 8, 15, 3, 9, 7}
逐个插入到初始为空的小根堆中,然后连续执行两次删除最小元素操作,再插入{4, 16}
,此后堆顶的元素是什么?
A. 4
B. 5
C. 7
D. 9
【答案】A
【解析】此题无需模拟建堆操作,堆顶的元素始终为最小的元素,因此答案为4。
4.23
- 树T的度为4,其中度为1、2、3、4的结点个数分别为4、2、1、1。则T中有多少个叶子结点?
A. 4
B. 6
C. 8
D. 10
【答案】C
【解析】根据定义有 n = n 0 + n 1 + n 2 + n 3 + n 4 n = n_0+n_1+n_2+n_3+n_4 n=n0+n1+n2+n3+n4,以及 n = n 1 + 2 n 2 + 3 n 3 + 4 n 4 + 1 n=n_1+2n_2+3n_3+4n_4+1 n=n1+2n2+3n3+4n4+1。 解得 n = 16 n=16 n=16,叶子结点的个数为 n 0 = 8 n_0=8 n0=8。
4.24
- JVM中类加载器有:()
A. 启动类加载器(bootstrap class loader)
B. 扩展类加载器(extensions class loader)
C. 应用程序类加载器(system class loader)
D. 自定义类加载器(user class loader)
E. 以上全是
【答案】E
【解析】启动类加载器(bootstrap class loader)、扩展类加载器(extensions class loader)、应用程序类加载器(system class loader) 、自定义加载器(user class loader)都属于JVM类加载器,并且加载过程采用双亲委派进行加载。如果对这些名词没概念的同学,自己私下一定要去补充一下jvm类加载的相关知识。
4.25
- 下列不是JVM 中垃圾回收算法的是()
A. 标记-清除算法
B. 标记-整理算法
C. 复制算法
D. 整体回收算法
【答案】D
【解析】标记-回收算法、标记-整理算法、复制算法、分代回收算法都属于JVM的垃圾回收算法。
4.26
- (二叉搜索树预习题)分别用以下序列构造二叉搜索树,与用其他3个序列所构造的结果不同的是()
A. {100, 80, 90, 60, 120, 110, 130}
B. {100, 120, 110, 130, 80, 60, 90}
C. {100, 60, 80, 90, 120, 110, 130}
D. {100, 80, 60, 90, 120, 130, 110}
【答案】C
【解析】A、B、D选项中构造的二叉搜索树层序遍历结果为{100, 80, 120, 60, 90, 110, 130},而C选项中所构造的二叉搜索树层序遍历结果为{100, 60, 120, NIL, 80, 110, 130, NIL, NIL, NIL, 90}。
4.27
- **(并查集预习题)以下关于并查集的说法中,正确的是() **
- ① 并查集是一种数据结构,用于处理一些不相交集合的合并和查询问题。
- ② 并查集通常支持查询(FIND)和合并(UNION)操作。
- ③ 并查集通常使用“路径压缩”和“按秩(或深度)合并”这两种优化方式。
- ④ 经过优化的并查集通常具有O(n)的空间复杂度和O(α(n))的单次操作复杂度。其中,α为反阿克曼函数。
A. ①②
B. ①②③
C. ①③
D. ①②③④
【答案】D
4.28
- (并查集预习题)已知存在12个结点,编号从小到大为1~12,经过如下的并查集操作后,下列说法中不正确的是()。
- UNION(1, 2)、UNION(3, 10)、UNION(7, 12)、UNION(3, 6)、UNION(4, 8)、UNION(7, 11)、UNION(5, 12)、UNION(1, 8)、UNION(9, 10)
A. FIND(1)与FIND(4)的结果一致
B. FIND(3)与FIND(6)的结果一致
C. FIND(5)与FIND(6)的结果一致
D. FIND(5)与FIND(12)的结果一致
【答案】C
【解析】根据题意可以得到如下的不相交集合: {1, 2, 4, 8}、{3, 6, 9, 10}、{5, 7, 11, 12}。 5和6并不在同一个集合中。
4.29
- (二叉搜索树预习题)平均查找效率最高的二叉搜索树为()。
A. 所有结点的左子树都为空的二叉搜索树
B. 所有结点的右子树都为空的二叉搜索树
C. 平衡二叉搜索树
D. 以上结果都不对
【答案】C
【解析】二叉树的查找效率取决于其高度,对于结点个数相同的二叉搜索树,平衡二叉搜索树的高度最小,因此平均查找效率最高。
4.30
- (二叉搜索树预习题)具有5层节点的平衡二叉树至少有()个结点。
A. 10
B. 12
C. 15
D. 17
【答案】B
【解析】设 N h N_h Nh表示高度为 h h h的平衡二叉树中所含有的最少结点数,则有: N 0 = 0 N_0=0 N0=0、 N 1 = 1 N_1=1 N1=1、 N 2 = 2 N_2=2 N2=2, N h = N h − 1 + N h − 2 + 1 N_h=N_{h-1}+N_{h-2}+1 Nh=Nh−1+Nh−2+1,递推可得 N 5 = 12 N_5=12 N5=12。