堆的创建和说明

news2025/1/10 2:01:57

文章目录

目录

文章目录

前言

小堆:

大堆: 

二、使用步骤

1.创建二叉树

2.修改为堆

3.向上调整

结果实现 

总结


前言

我们已经知道了二叉树的样子,但是一般的二叉树是没有什么意义的,所以我们会使用一些特殊的二叉树来进行实现,而堆就为特殊的二叉树来表示的。


一、堆是什么?

堆是一种特殊的二叉树,由完全二叉树来表示,分为小堆和大堆的表现形式,小堆的表现形式为父节点比孩子节点要小,下面的根节点同样满足这个条件,大堆与之相反,父节点要比孩子节点大,根节点同样满足条件。

小堆:

大堆: 

二、使用步骤

1.创建二叉树

创建堆我们首先需要创建一个二叉树,我们可以使用数组的形式来表示二叉树,逻辑结构上我们将数组看为二叉树的形式,物理结构上还为数组,我们现在需要将其修改为堆。

2.修改为堆

我们需要得知其的父节点个子节点,可以举例为第一个节点为父节点下标为0,子节点的下标为1和2。当父节点下标为1时,子节点下标3和4。由此可以推出公式,

父节点=(子节点-1)/2

子节点=父节点*2+1

通过这两个公式我们就可以试着将二叉树修改为堆。

3.向上调整

我们建造一个小堆要使父节点比子节点都要小,我们可以通过子节点和父节点进行对比,如果子节点更小的话就将其进行交换,我们可以通过公式由子节点来找到父节点来进行实现,结束条件就为子节点小于或等于0时。

void Adjiustup(typedata* ps, int child)
{
	int parent = (child - 1) / 2;
	while (child > 0)
	{
		if (ps[child] < ps[parent])
		{
			Swap(&ps[child], &ps[parent]);
			child = parent;
			parent = (child - 1) / 2;
		}
		else
		{
			break;
		}
	}
}

结果实现 

运行结果如图所示,成功创建小堆,如果要创建大堆的话,只需要修改子节点和父节点的比较条件即可。


总结

一般的二叉树是没有什么意义的,这个堆我们可以根据其的特性进行一些有意义的事情,希望我的这篇文章对您有所帮助,如有错误,欢迎指出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1969362.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

齿轮端面重合度学习笔记分享

我们知道两个渐开线圆柱齿轮能够正确啮合&#xff0c;他们的基节相等是正常传动的必要但不处分条件。由于轮齿的高度有限&#xff0c;啮合的区间有限&#xff0c;齿轮能否连续传动还要看轮齿对能否及时接替&#xff0c;即前一对轮齿脱离啮合时&#xff0c;后一对轮齿是否已进入…

uniapp结合uview-ui创建项目关键步骤一步一图教程

文章目录 1 构建项目准备工作2 项目创建2.1 打开开发者工具HBuilderX2.2 创建一个新的项目2.3 引入uview-ui组件2.4 uview-ui组件配置2.4.1 uview-ui组件简单介绍2.4.2 修改main.js2.4.3 修改page.json2.4.4 修改App.vue2.4.5 修改uni.scss2.4.6 修改index.vue 2.5 api接口封装…

antv x6使用Vue+ElementPlus实现右键菜单

基于X6官方给出的React版的右键菜单示例&#xff0c;实现Vue版本的&#xff0c;其中右键菜单使用的是ElMenu的样式。 import { ToolsView } from antv/x6 import { h, render } from vue import { ElMenu, ElMenuItem } from element-plus export class ContextMenuTool exten…

公司的Spring框架接受MIME类型为json格式的带null的字符串,然后这个带null的字段被自动忽略了,排查了好久

接收方法&#xff1a; 解决方案&#xff1a; 先去掉RequsetBody 因为使用RequsetBody时&#xff0c;框架会调用HttpMessageConvert读取HttpRequest的InputStram反序列化为对象&#xff0c;这个InputStram只能读一次。 后续你的代码再通过Reader读输入流时&#xff0c;已经没有…

小米SU7对手来了,魅族汽车今年上市

新能源车市场竞争白热化的 2024 年&#xff0c;那些当初一股脑扎堆入场的各路新势力们&#xff0c;估计压根没想到造个车也能这么卷吧&#xff01; 还是那句话&#xff0c;当一个行业开始极度内卷&#xff0c;也就意味着已经到了整个淘汰赛最残酷的环节。 目前来说&#xff0…

相位相关法图像配准

小结&#xff1a;本文主要介绍基于相位相关法的图像配准。 1. 相位相关法 在时域中信号的平移运动可以通过在频域中相位的变化表现出来&#xff08;这是傅里叶变换的特性&#xff0c;见下图&#xff09;。平移不影响傅氏变换的幅值&#xff08;谱&#xff09;&#xff0c;对应…

利用人工智能ChatGPT自动生成基于PO的数据驱动测试框架

简介 PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类&#xff0c;并以页面为单位来写测试用例&#xff0c;实现页面对象和测试用例的分离。 数据驱动测试&#xff08;DDT&#xff09;是一种方法&#xff0c…

IOday5

一、思维导图 二、练习 使用两个线程完成两个文件的拷贝&#xff0c;分支线程1拷贝前一半&#xff0c;分支线程2拷贝后一半&#xff0c;主线程回收两个分支线程的资源 #include<myhead.h>//定义结构体存储需要传到线程函数中的内容 struct Buf {const char *file[2]; …

Python爬虫:下载人生格言

Python爬虫:下载人生格言 爬取网页 将这些格言下载存储到本地 代码: import requests #导入requests库&#xff0c;用于提取网页 from lxml import etree#导入lxml库&#xff0c;用于Xpath数据解析#请求头 header{ user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) A…

aurora8b10b ip的使用(未完)

文章目录 一、Aurora8B/10B协议二、时钟、复位与状态指示1、时钟2、复位3、状态指示 三、数据发送、接受接口&#xff08;1&#xff09;AXI4-Stream位排序&#xff08;2&#xff09;Streaming接口&#xff08;3&#xff09;Framing接口&#xff08;帧传输接口&#xff09; 四、…

输入成绩问题(c语言)

1.问题&#xff1a;期中考试开始了&#xff0c;大家想要取得好成绩&#xff0c;争夺前五名&#xff0c;从键盘输入n个学生成绩&#xff08;不超过40个&#xff09;&#xff0c;输出每组的前五名的成绩 两行&#xff0c;第一行输入一个整数&#xff0c;表示n个学生&#xff08;…

springboot学习笔记第一天

springboot的简单了解 Java Spring 是一个开源的轻量级应用框架&#xff0c;在 Java 应用开发中起到了简化开发、提高效率、促进模块化和松耦合、支持技术集成等多重作用&#xff0c;成为了广大企业和开发者首选的企业级 Java 应用开发框架之一。 Spring Boot 是一个基于 Spr…

深度学习中6种loss函数Pytorch API调用示例

自定义数据 import torch import torch.nn as nn import torch.nn.functional as Fbatchsize2 num_class4logitstorch.randn(batchsize,num_class) targettorch.randint(num_class,size(batchsize,))#delta目标分布 target_logitstorch.randn(batchsize,num_class)#非delta目标…

浏览器中的同源策略、CORS 以及相关的 Fetch API 使用

前言 笔者对前端 Web 技术的认真学习&#xff0c;其实开始于与 Fetch API 的邂逅。当时觉得 fetch() 的设计很不错&#xff0c;也很希望能够请求其它网站下的数据并作处理和展示。学习过程中 HTML 和 CSS 都还好说&#xff0c;由于几乎没有 Web 技术的基础&#xff0c;学习 Fe…

vue配置多个环境变量ENV【收藏版】

vue配置多个环境变量 1. 创建环境变量文件 在你的Vue项目根目录下&#xff0c;你可以创建以下环境变量文件&#xff1a; .env&#xff1a;所有环境都会加载的通用变量。 .env.local&#xff1a;本地覆盖&#xff0c;不会被git跟踪。 .env.[mode]&#xff1a;只有指定模式才会…

1007 Maximum Subsequence Sum(Java)

题目 解释 题目说的就是给你一串K个数字&#xff0c;让你找到连续的和最大的子串&#xff0c;同时输出子串的和、子串起始的元素、子串末尾的元素&#xff0c;如果K个数字全是负数&#xff0c;输出子串和为0、子串起始元素为整个字符串的第一个元素&#xff0c;子串末尾元素为…

CompletableFuture并行编程生产问题处理

前提 本文章是在项目中发现一些同学对并行编程的思想理解&#xff0c;或者说对代码的执行逻辑有些理解偏颇的地方。特整理此文章进行分享&#xff0c;希望有同样困惑的小伙伴能够对此类问题有一个清晰的理解。 在此不会介绍CompletableFuture对库函数用法&#xff0c;因为库函数…

XSS-labs靶场(超详解)1-20关——附原码

level1 原码 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"> <script> window.alert function() { confirm("完成的不错&#xff0…

【Java】字符串StringBuilder类和Stringjoiner类(013)

目录 ♦️StringBuilder类 &#x1f38f;StringBuilder构造方法 &#x1f421;无参构造 &#x1f421;有参构造 &#x1f38f;SringBuilder常用方法 &#x1f38f;StringBuildre类练习题&#xff1a; &#x1f421;对称字符串 &#x1f421;拼装字符串 ♦️Stringjoine…

(Python)内存管理

前言 内存泄漏在编程中是一个严重的问题&#xff0c;可能导致程序性能下降、系统不稳定甚至崩溃。 目录 危害 风险 动态内存分配 引用计数 内存池 垃圾回收 设计原则 危害 性能下降&#xff1a;可用内存减少&#xff0c;导致系统频繁进行内存交换&#xff0c;使程序运行…