习题一
一、下列序列中哪个是最小堆?
AA.2,55,52,72,28,98,71
BB.2,28,71,72,55,98,52
CC.2,28,52,72,55,98,71
DD.28,2,71,72,55,98,52
习题二
二、在最大堆 {97,76,65,50,49,13,27}中插入83后,该最大堆为:
AA.{97,76,65,83,49,13,27,50}
BB.{97,83,65,76,49,13,27,50}
CC.{97,83,65,76,50,13,27,49}
DD.{97,83,65,76,49,50,13,27}
习题三
对由同样的n个整数构成的二叉搜索树(查找树)和最小堆,下面哪个说法是不正确的:
AA.二叉搜索树(查找树)高度大于等于最小堆高度
BB.对该二叉搜索树(查找树)进行中序遍历可得到从小到大的序列
CC..从最小堆根结点到其任何叶结点的路径上的结点值构成从小到大的序列
DD.对该最小堆进行按层序(level order)遍历可得到从小到大的序列
答案区
题目 | 答案 |
习题一 | C |
习题二 | B |
习题三 | D |
解析区
习题一
习题一就是一道简单的考察最小堆定义的题目,我们把数组转化成完全二叉树的形式来看,很快就可以得出答案:
故而最终选择的是C选项。
习题二
习题二考察堆的插入操作。
我们先把这个最大堆画出来:
插入结点83:
然后进行调整:
故而就可以得到插入结点83之后的堆了,选B选项。
习题三
。
习题三考察的是对二叉搜索树和最小堆两个结构的理解和简单应用。
- A选项,二叉搜索树高度大于等于最小堆高度。
在二叉搜索树中,每个结点的值都大于其左子树中的所有结点的值,小于其右子树中的所有结点的值。所以,二叉搜索树的高度取决于结点在树中的排列方式。
如果考虑最好的情况,二叉搜索树的排列方式完全平衡,即为一颗平衡二叉树,那么它的高度就为log2N
�
�
�
2
�
。如果考虑最坏的情况,二叉搜索树的排列方式呈现为斜二叉树,那么它的高度就为N
N
。(N为结点数)
相比之下,最小堆是一种完全二叉树,其中每个结点的值都小于或等于其子结点的值。
因此,最小堆的高度取决于结点数,而不是结点排列方式。具体来说,最小堆的高度为log2N
�
�
�
2
�
。(N为结点数)
所以一般情况下,二叉搜索树的高度是大于等于最小堆的高度的。
A选项正确。
B选项,对该二叉搜索树(查找树)进行中序遍历可得到从小到大的序列。
前面我们讲过了,在二叉搜索树中,每个结点的值都大于其左子树中的所有结点的值,小于其右子树中的所有结点的值。
而中序遍历的顺序是先左子树->根节点->右子树,因此中序遍历得到的序列是从小到大排列的。
B选项正确。
C选项,从最小堆根结点到其任何叶结点的路径上的结点值构成从小到大的序列。
这句话就是堆的性质,是最小堆的有序性,在“什么是堆”中就已经学习过。
C选项正确。
D选项,对该最小堆进行按层序(level order)遍历可得到从小到大的序列
对于最小堆而言,每个结点的值都小于等于其子结点的值。
而层序遍历是从根结点开始,先遍历根结点,然后按照从上到下、从左到右的顺序依次遍历每一层的结点。很显然,这样遍历一个堆是不一定能拿到一个从小到大的序列的。
例如习题一的C选项:
它为最小堆,但是按层序遍历得到的序列为:2,28,52,72,55,98,71。
并不是从小到大的。
因为最小堆的性质只保证了每个结点的值都小于等于其子结点的值,但并没有保证同一层结点之间的大小关系。
因此,按层序遍历得到的序列可能存在某些结点之间的大小关系不符合从小到大的顺序。
故而,D选项错误。
综上,习题三选择的是不正确的选项,即D选项。
end