数据结构学习记录——堆的小习题(对由同样的n个整数构成的二叉搜索树(查找树)和最小堆,下面哪个说法是不正确的)

news/2024/11/29 4:53:02/

目录

习题一

习题二

习题三

答案区

解析区

习题一

习题二

习题三


习题一

一、下列序列中哪个是最小堆?

\textbf{A}.2,55,52,72,28,98,71

\textbf{B}.2,28,71,72,55,98,52 

\textbf{C}.2,28,52,72,55,98,71

\textbf{D}.28,2,71,72,55,98,52

 

习题二

二、在最大堆 {97,76,65,50,49,13,27}中插入83后,该最大堆为:

\textbf{A}.{97,76,65,83,49,13,27,50}

\textbf{B}.{97,83,65,76,49,13,27,50} 

\textbf{C}.{97,83,65,76,50,13,27,49}

\textbf{D}.{97,83,65,76,49,50,13,27}

习题三

对由同样的n个整数构成的二叉搜索树(查找树)和最小堆,下面哪个说法是不正确的:

\textbf{A}.二叉搜索树(查找树)高度大于等于最小堆高度

\textbf{B}.对该二叉搜索树(查找树)进行中序遍历可得到从小到大的序列

\textbf{C}.从最小堆根结点到其任何叶结点的路径上的结点值构成从小到大的序列

\textbf{D}.对该最小堆进行按层序(level order)遍历可得到从小到大的序列

答案区

题目答案
习题一C
习题二B
习题三D

解析区

习题一

 

习题一就是一道简单的考察最小堆定义的题目,我们把数组转化成完全二叉树的形式来看,很快就可以得出答案:        

 

 

故而最终选择的是C选项。 

习题二

 

习题二考察堆的插入操作。

我们先把这个最大堆画出来: 

插入结点83:

 

然后进行调整:

 

故而就可以得到插入结点83之后的堆了,选B选项。 

习题三

。 

习题三考察的是对二叉搜索树和最小堆两个结构的理解和简单应用。

  • A选项,二叉搜索树高度大于等于最小堆高度。

在二叉搜索树中,每个结点的值都大于其左子树中的所有结点的值,小于其右子树中的所有结点的值。所以,二叉搜索树的高度取决于结点在树中的排列方式。

如果考虑最好的情况,二叉搜索树的排列方式完全平衡,即为一颗平衡二叉树,那么它的高度就为{log_{2}}^{N}。如果考虑最坏的情况,二叉搜索树的排列方式呈现为斜二叉树,那么它的高度就为\textbf{N}。(N为结点数)

相比之下,最小堆是一种完全二叉树,其中每个结点的值都小于或等于其子结点的值。

因此,最小堆的高度取决于结点数,而不是结点排列方式。具体来说,最小堆的高度为{log_{2}}^{N}。(N为结点数)

所以一般情况下,二叉搜索树的高度是大于等于最小堆的高度的。

A选项正确。

  • B选项,对该二叉搜索树(查找树)进行中序遍历可得到从小到大的序列。

 前面我们讲过了,在二叉搜索树中,每个结点的值都大于其左子树中的所有结点的值,小于其右子树中的所有结点的值。

而中序遍历的顺序是先左子树->根节点->右子树,因此中序遍历得到的序列是从小到大排列的。

B选项正确。

  • C选项,从最小堆根结点到其任何叶结点的路径上的结点值构成从小到大的序列。

这句话就是堆的性质,是最小堆的有序性,在“什么是堆”中就已经学习过。

C选项正确。

  • D选项,对该最小堆进行按层序(level order)遍历可得到从小到大的序列

对于最小堆而言,每个结点的值都小于等于其子结点的值。

而层序遍历是从根结点开始,先遍历根结点,然后按照从上到下、从左到右的顺序依次遍历每一层的结点。很显然,这样遍历一个堆是不一定能拿到一个从小到大的序列的。

例如习题一的C选项:

它为最小堆,但是按层序遍历得到的序列为:2,28,52,72,55,98,71。

并不是从小到大的。

因为最小堆的性质只保证了每个结点的值都小于等于其子结点的值,但并没有保证同一层结点之间的大小关系。

因此,按层序遍历得到的序列可能存在某些结点之间的大小关系不符合从小到大的顺序。

故而,D选项错误。

综上,习题三选择的是不正确的选项,即D选项。

 


end 


学习自:MOOC数据结构——陈越、何钦铭 


http://www.ppmy.cn/news/64876.html

相关文章

ASP.NET Core 8 中身份验证的改进

ASP.NET Core 团队正在改进 .NET 8 中的身份验证、授权和身份管理(统称为“身份验证”)。新的 APIs 将使自定义用户登录和身份管理体验变得更加容易。新的端点将在没有外部依赖的单页应用程序(SPA)中启用基于令牌的身份验证和授权。我们还将改进我们的指引和文档,使…

C++实现二分查找(力扣题目704)

题目要求:给定一个n个元素的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1 示例 输入: nums [-1,0,3,5,9,12] target 9 输出: 4 解释: 9 出现在…

读书笔记:《图解CIO工作指南》

《图解CIO工作指南》第 4 版,日 . 野村综合研究所系统咨询事业本部 著,周自恒 译 大数据、云计算时代下的IT战略和IT实务 CIO工作:IT管理、IT架构、IT实践 以着眼企业未来的观点进行构思:可视化(业务与系统&am…

研究Linux内核的乐趣

对Linux的内核学习和研究的越多,越觉得其乐无穷。因为Linux内核的代码是由这二三十年来,世界上顶尖聪明的一群人编写的,为提高效率而做的各种设计和算法,充满着智慧的光芒。有时,在理解这些设计和算法的过程中&#xf…

前端常用的一些编辑器库

在 Vue3 TypeScript 中可以使用一些第三方库来实现代码文本编辑器,以下是一些常用的库: CodeMirror:一个灵活、易于集成的代码编辑器,支持多种语言和主题。 Monaco Editor:由微软开发的高性能代码编辑器,支…

消息队列的实现

【前言】 游戏的主逻辑一般是单线程的,所以实现一个消息队列很简单,不像互联网开发中会涉及多线程、多进程。可以先看看这篇文章。 对回调函数和消息机制的理解_消息回调函数_永恒星的博客-CSDN博客 这里尝试先去分析一些要素,然后直接基于…

如何从小白成长为一名运维专家

运维是系统管理和维护的一部分,要从小白成长为一名运维专家,需要不断学习、实践和积累经验。以下是一些建议,可以帮助您从小白成长为运维专家。 1、学习基础知识:掌握计算机基础知识,如操作系统(如Linux、Windows等)和…

2023 年第八届数维杯数学建模挑战赛 赛题浅析

为了更好地让大家本次数维杯比赛选题,我将对本次比赛的题目进行简要浅析。本次比赛的选题中,研究生、本科组请从A、B题中任选一个 完成答卷,专科组请从B、C题中任选一个完成答卷。这也暗示了本次比赛的难度为A>B>C 选题人数初步估计也…