数据结构与算法——每日一练(4月)

每日一练

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=Nh1+Nh2+1,递推可得 N 5 = 12 N_5=12 N5=12

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

讲文明的喜羊羊拒绝pua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值