PTA 线性结构/AVL树/哈夫曼树错题

1.稀疏矩阵压缩存储后,必会失去随机存取功能。

TF

解析:稀疏矩阵的存储方式是将数据压缩存储进一维数组,数组下标与之前的不相同了,想要某一元素需要根据公式计算它的下标,所以说是失去了随机存取的功能。

2.[2020真题]将一个10×10对称矩阵M的上三角部分的元素m [ i , j ](1≤i≤j≤10)按列优先存入C语言的一维数组N中,元素m[ 7,2 ]在N中下标是( C

A.15

B.16

C.22

D.23

解析:在正式分析这道题前,先简单说一下这个压缩存储的原理,具体看下图。

        核心是算出在此元素前有多少个元素

        所以根据公式(注意按列优先,且上三角),算出在[ 7 , 2 ]前面已经有sum = (7-1)*(1 + (7-1))/  2 = 21,第7列 第2行 m元素前有1个元素(注意数组下标从1开始),所以m应该是:21 + 1 + 1 = 23个元素,因为C语言中数组下标从0开始,所以对应下标是22。

3.已知二维数组A[0..4][0..5],则A按行优先存储时元素A[3][5]的地址与A按列优先存储时元素( )的地址相同。( B

A.A[2][4]

B.A[3][4]

C.A[3][5]

D.A[4][3]

解析:读题知道,此矩阵(二维数组)下标从零开始,所以矩阵元素下标 0 <= i  <= 4,0 <= j <= 5,也就是说这个矩阵每行有5个元素,每列6个元素。所以当A按行优先存储时,前面一共有:sum = 6 * 3 + 4 = 23,而A是第 23 + 1 = 24个元素。下标为23(数组下标默认从0开始)。

        再来看选项(按列优先);

        A,此元素前有sum = 4 * 5 + 2 = 22,此元素是第22+1个,存储中下标是22。

        B,此元素前有sum = 4 * 5 + 3 = 23,此元素是第23+1个,存储下标是23。

        C,此元素前有sum = 5 * 5 + 3 = 28,此元素是个28+1个,存储下标为29。

        D,此元素前有sum = 5 * 3 + 4 =19,此元素是第19+1个,存储下标19。

----------------------------------------------------------树-------------------------------------------------------------------

因为有英文题,补充几个单词:

inorder traversal :先序遍历

perfect binary tree:完美二叉树          complete binary tree:完全二叉树

non-leaf / leaf:非叶  /  叶节点

iff:当且仅当

1.An AVL tree with the balance factors of all the non-leaf nodes being 0 must be a perfect binary tree.

TF

解析:这道题中文意思是,如果一颗AVL树所有非叶节点的平衡因子都为0,那么这棵树一定是完美二叉树。

        回答之前,先看一下完美二叉树定义:所有分支节点都存在左右子树,且所有叶节点都在同一层上。   这句话什么意思呢,意思是所有节点度都为0,因为左右子树也都为满足同时有左右子树且叶节点在同一层上。所以这句话对的。

2.For an AVL tree, the balance factors of all the non-leaf nodes are 0 iff the tree is a complete binary tree.

TF

解析:这道题中文意思是,一颗AVL树只有在所有非叶节点的平衡因子都为零时才是一颗完全二叉树。

        这道题显然在考什么是完全二叉树,注意,和完美二叉树不同,完全二叉树叶节点可以出现在树的最下层和此下层,也就是说对于一颗完全二叉树来说,父节点的平衡因子可以是-1,所以这个“ iff ”就用的不对了。

3.In an AVL tree, it is possible to have this situation that the balance factors of a node and both of its children are all -1.

TF

解析:这道题中文意思是,存在一颗AVL树的结点的左右孩子的平衡因子都是-1。

        这个也很好理解了,就AVL树定义,结点的平衡因子集{ -1,0,1},所以这种情况是可能存在的。

4.平衡二叉树中,若某个结点的左、右孩子的平衡因子为零,则该结点的平衡因子一定为零。

TF

解析:这道题有点绕,来层层解析,首先对于一个结点,它的左右孩子的平衡因子为零,代表它的左孩子和右孩子的左右子树等高,但是没说左孩子子树的深度一定等于右孩子子树的深度,所以对于根节点来说,是不一定平衡因子相同的。

5.如果AVL树的深度为5(空树的深度定义为0),则此树最少有多少个结点?( A

A.12

B.20

C.33

D.64

解析:这道题是一个考点,就是AVL树的最少结点。如何推导的可以去看mooc浙江大学数据结构,我直接给出一个规律 n = F(h+2) - 1;(F(h+2) 代表(层数+2)对应的斐波那契数),就是那个1 1 2 3 5 8....的斐波那契数。例如此题中说第5层,那么F(5+2) = F7 = 13,n = 13 - 1 = 12。

 补充:对于给定结点数,生成的AVL树深度最多为log2n(2为底数)。

6.During inserting { 42, 26, 8, 70, 102, 56, 2} into an initially empty AVL tree, which of the following statements is true?( A

A.The resulted AVL tree is also a completed binary tree;

B.There are 4 rotations: LL,RR,LR,LL

C.There are 4 rotations: LL,RR,LL,RL

D.There are 3 rotations: LL,RR,RL

解析:将{ 42, 26, 8, 70, 102, 56, 2}这几个数初始化为一颗AVL树,接下来是我画的插入流程图。

        经历了三次旋转分别是LL,RR,LL,但结果是一颗完全二叉树(完美二叉树)。

7.If there are 14 nodes in an AVL tree, then the maximum depth of the tree is ____. The depth of an empty tree is defined to be 0.( C

A.3

B.4

C.5

D.6

解析:这道题和前面第5题有点相似,注意题目说空树的深度定义为0就行了。

8.When generating Huffman codes for n distinct characters, if the corresponding Huffman tree has 115 nodes in total, then the value of n must be:( C

A.56

B.57

C.58

D.60

 解析:题目意思是,将 n 个不同的字符进行哈夫曼编码,如果最终这个哈夫曼编码树有115个结点,那么 n 的值应该是多少。

        题意清晰了就很明了了,哈夫曼前缀码树本质还是一个哈夫曼树,哈夫曼树的结点个数为 2n - 1 ,也就是可以得出一个等式,2n - 1 = 115,求出n等于58。

9.为五个使用频率不同的字符设计哈夫曼编码,下列方案中哪个不可能是哈夫曼编码?( A

A.00,100,101,110,111

B.000,001,01,10,11

C.0000,0001,001,01,1

D.000,001,010,011,1

解析:这道题是一道很经典的题,注意哈夫曼前缀码树没有度为1的结点。一眼就能看出A错了,因为没有01,相当于根的左孩子的度为1,明显违反前缀码树的定义。

10.已知不相交集合用数组表示为{ 4, 6, 5, 2, -3, -4, 3 }。若集合元素从1到7编号,则调用Union(Find(7),Find(1))(按规模求并,并且带路径压缩)后的结果数组为:( D

A.{ 4, 6, 5, 2, 6, -7, 3 }

B.{ 4, 6, 5, 2, -7, 5, 3 }

C.{ 6, 6, 5, 6, -7, 5, 5 }

D.{ 6, 6, 5, 6, 6, -7, 5 }

解析:这是一道并查集的题目,并查集需要掌握的只有三个点,1存储方式,2查找与合并,3路径压缩。现在来分析这道题,先进行find操作,找出7的根结点是5,5底下挂了3个孩子;然后找到1的根节点是6,6底下挂了4个孩子,根据Union算法的要求,将孩子少的挂到孩子多的根结点身上,所以将5挂到6下面,而且要求带路径压缩,所以答案选D,具体看下图。

------------------------------------------------------------图----------------------------------------------------------------

1.Kruskal's algorithm is to grow the minimum spanning tree by adding one edge, and thus an associated vertex, to the tree in each stage.

TF

 解析:题目中文意思是,Kruskal算法是以在每个阶段插入一条边,从而添加一个结点,最后生成Spanning tree(最小生成树)的过程。

        这里明显错了哈,Kruskal算法初始是一个没有边的森林,通过插入边生成最小生成树,而不是通过插入边完善顶点。

2.If graph G is a connected graph, the spanning tree of G is a maximal connected subgraph containing all n vertices of G.

TF

解析:题目中文意思是,如果图G是一个连通图,那么G的生成树是G的一个包含G所有顶点的极大连通子图。如果G是无向图,那么G的极大连通子图(也称连通分量)是唯一的,且无向图G的生成树不是唯一的,只要遍历一次G就能生成一颗生成树。

3.Let M be the minimum spanning tree of a weighted graph G. Then the path in M between V1 and V2 must be the shortest path between them in G.

TF

解析:题目中文意思是,如果M是带权图G的最小生成树,那么在M中,V1,V2这两个顶点间的路径一定是原图G里这两个顶点间所有路径里最短的。

        这个很容易选错,就是回顾一下,最小生成树是边权值总和最少的,举个栗子:

4.

In a weighted graph, if the length of the shortest path from b to a is 10, and there exists an edge of weight 3 between c and b, then how many of the following statements is/are TRUE?( B )

  1. The length of the shortest path from c to a must be 13.
  2. The length of the shortest path from c to a must be 7.
  3. The length of the shortest path from c to a must be no greater than 13.
  4. The length of the shortest path from c to a must be no less than 7.

A.1

B.2

C.3

D.4

解析:这道题中文意思是,如果在一个带权图中,顶点b到顶点a的最短路径是10,而且c到b中间有一条权重为3的路,下面说法有几个是对的。

        看第一个,肯定错了。第二个也是。画图就知道既然3存在,那么最短路径最大不可能超过13了。而且最少不可能比7还小,如果比7小的话,b-a的最短路径就不是10了。

 

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值