数据结构:什么是堆,和二叉树有什么关系

news2024/11/15 13:39:32

堆栈模型

JS 代码执行时,值类型变量存储在栈,引用类型变量存储在堆。

// 变量 a 存储在栈里
let num1 = 1
let num2 = num1
num2 = 2
// 这时打印 num1 是 1,num2 是 2。
// { a: 1 } 存在堆里,obj1 只是一个指针引用
let obj1 = { a: 1 }
// 这时一个叫 obj2 的指针也指向了这个堆
let obj2 = obj1
// 修改数据是修改的堆的数据,所以 obj1 和 obj2 的结果都会变
obj2.a = 2
// 这时打印 obj1 是 { a: 2 },num2 是 { a: 2 }。

在这里插入图片描述

堆和二叉树

堆是一个完全二叉树
最大堆:父节点 >= 子节点
最小堆:父节点 <= 子节点

比如:父节点 10 小于所有的子节点,父节点 14、25 也小于所有的子节点
在这里插入图片描述

完全二叉树
若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布。
所以一个满二叉树一定是完全二叉树。

A
B
C
D
E
F

那么为什么要设计最大堆最小堆呢?
答:堆的逻辑结构是二叉树,物理结构是数组
数组:适合连续存储、节省空间

比如上图就是一个最小堆,我们用数组表示

// 忽略 0 节点 -1
const arr = [-1, 10, 14, 25, 33, 81, 82, 99]

那么我们如果要找某一项的关系节点怎么找呢,由于这是一个最小堆,这是有规律的

// 节点关系
const parentIndex = Math.floor(i / 2)
const leftIndex = 2 * i
const rightIndex = 2 * i + 1

知道了这个关系,找到对应的值会很快,就行数组找 index 的值一样,复杂度 O(1)

堆的特点

  • 查询比 BST(平衡搜索树) 慢。因为规则简单,不像 BST 左边一定比右边小。但是堆的使用场景就是堆栈模型,而堆栈模型是直接通过指针引用(这个指针已经知道了是哪个index了),不用遍历查找。所以还是很快。
  • 删除比 BST 快,维持平衡更快,原因同上规则简单。

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

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

相关文章

华为 WATCH Ultimate 如何开通和使用北斗卫星卡

华为春季新品发布会发布了全新系列手表华为WATCH Ultimate非凡大师&#xff0c;实现了“向上捅破天”的突破性应用&#xff0c;让大家通过手表与世界一直相连。当用户在周围无信号&#xff08;无蜂窝网络/WLAN网络覆盖&#xff09;的情况下&#xff0c;处于空旷无遮挡的环境时&…

基于超声波传感器的液位测量及控制系统设计(STM32)

一、引言 随着工业的发展&#xff0c;计算机、微电子、传感器等高新技术的应用和研究&#xff0c;液位仪表的研制得到了长足的发展&#xff0c;以适应越来越高的应用要求。液位的测量在工业生产过程中已经起着相当重要的作用&#xff0c;其类型大概可以分为接触型和非接触型两大…

最近搭了一个数据监测看板。

在大数据时代&#xff08;这个开头我已经看腻了 &#xff09;&#xff0c;为了挖掘冗余数据的价值&#xff0c;数据分析需求日益增多&#xff0c;而分析结果的常见表现形式有数据分析报告和数据看板&#xff08;大屏&#xff09;&#xff0c;与报告文档不同&#xff0c;数据看板…

8.1.0:DHTMLX Suite JavaScript UI Crack

适用于现代 Web 应用程序的强大 JavaScript 小部件库 - DHTMLX 套件 用于创建现代用户界面的轻量级、快速且通用的 JavaScript/HTML5 UI 小部件库。 DHTMLX Suite 有助于推进 Web 开发和构建具有丰富功能的数据密集型应用程序。 DHTMLX Suite 是一个 UI 小部件库&#xff0c;用…

移动端高性能Unity播放器实现方案

前情提要&#xff1a; 视听体验再进化——如何在24小时内全面升级你的视频应用 如何打造新时代的终端播放产品&#xff1f; 随着VR、AR、元宇宙等新玩法的出现&#xff0c;Unity平台的视频播放需求逐渐增加&#xff0c;比如下面两个动图就是在百度真实的案例。前者是演唱会场景…

ChatGPT能够知道当下最流行的开发语言,以及各语言哪个开发框架最火吗?

如果你准备成为一名开发人员&#xff0c;但是面对琳琅满目的开发语言&#xff0c;然后每种语言的开发框架却无从下手&#xff0c;张三推荐你学这个&#xff0c;李四推荐你学那个&#xff0c;而你的时间又是有限的&#xff0c;于是我决定问一问这个万事通ChatGPT。 目录 1. 目前…

C语言小项目 -- 扫雷游戏完整代码(递归展开 + 选择标记)

目录 &#x1f680;0. 游戏介绍&#xff1a; &#x1f437; 游戏规则 &#x1f6f8;雷诀八条 &#x1f680;1. 开发环境及框架&#xff1a; &#x1f680;2. 游戏具体功能分析实现&#xff1a; &#x1f437;2.1 棋盘 &#x1f437;2.2 棋盘初始化 init_Board; &#x1…

用Abp实现两步验证(Two-Factor Authentication,2FA)登录(三):免登录验证

文章目录原理修改请求报文配置JwtBearerOptions生成Token校验Token修改认证EndPoint修改前端登录登出最终效果项目地址免登录验证是用户在首次两步验证通过后&#xff0c;在常用的设备&#xff08;浏览器&#xff09;中&#xff0c;在一定时间内不需要再次输入验证码直接登录。…

Go 语言 入门 基于 GoLand 2023.1 创建第一个Go程序

文章目录Go 语言 入门go 语言是什么?go 入门 需要 学习 什么?Go 语言有 那些优势?Go 语言 与 Java 语言 对比Go 语言 与Python 语言 对比Go 语言 基于 GoLand 创建第一个程序1. 打开 GoLand2.选择 new3. 选择SDK版本4. 输入项目名称,点击 cteate项目创建完成下一步,创建一个…

SpringBoot-心跳机制+redis实现网站实时在线人数统计

在社交网站中&#xff0c;通常需要实时统计某个网站的在线人数&#xff0c;通过该指标来实时帮助运营人员更好的维护网站业务&#xff1a; 先说一下目前在市面上主流的做法再加上我自己查阅的资料总结&#xff1a; 创建一个session监听器&#xff0c;在用户登录时即创建一个s…

WEB集群之反向代理,动静分离,NFS,mysql,MHA高可用

目录 第一章实验架构 1.1.实验图谱架构 1.2.实验前环境部署 第二章实验步骤 2.1.在ha01&#xff0c;ha02上部署keeplived,lvs-dr 2.2.Slave01,slave02安装nginx 2.3.LVS负载均衡 2.4.搭建动态网页 2.5.nginx反向代理 2.6.部署NFS 2.7.安装mysql 2.8.安装mha 2.9.主…

教你安装 CodeWhisperer: 一款个人免费的类似GitHubCopilot能代码补全的 AI 编程助手

1、官网 AI Code Generator - Amazon CodeWhisperer - AWS 官方扩展安装教程 2、安装VSCode 下载安装VSCode 3、VSCode安装CodeWhisperer插件 安装VSCode插件 - AWS Toolkit主侧栏&#xff0c;点击AWS &#xff0c;展开CodeWhisperer&#xff0c;点击Start 在下拉菜单中点…

洗浴中心管理系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a; 更多系统资源库地址&#xff1a;骚戴的博客_CSDN_更多系统资源 更多系统…

煤矿井下人员精准定位系统,煤矿应急救援高效应用

煤矿行业的安全发展&#xff0c;事关数人民群众的生命财产安全。自2020年起&#xff0c;国家连续三年出台煤矿智能化建设及重大风险防控的相关指导政策&#xff0c;其中&#xff0c;2022年出台的《煤矿及重点非煤矿山重大灾害风险防控建设工作总体方案》中提到&#xff0c;要充…

52 openEuler搭建PostgreSQL数据库服务器-管理数据库角色

文章目录52 openEuler搭建PostgreSQL数据库服务器-管理数据库角色52.1 创建角色创建角色示例52.2 查看角色查看角色示例52.3 修改角色52.3.1 修改用户名52.3.2 修改用户示例52.3.3 修改用户密码52.3.4 修改角色密码示例52.4 删除角色删除角色示例52.5 角色授权角色授权示例52.6…

Python旅游好帮手:提前15天准备五一旅游景点详细数据

人生苦短&#xff0c;我用python 虽然还是有15天才放五一的假&#xff0c; 但是我的心早已经在旅游的路上了~ 本文源码&#xff1a;点击此处跳转文末名片获取 趁现在&#xff0c;先来用python做一个旅游攻略 知识点&#xff1a; requests parsel csv 第三方库&#x…

python查看时间序列数据的季节规律matplotlib画时间(10分钟为间隔)序列坐标

目录0 问题描述1. 案例12. 案例2参考资料0 问题描述 将多个时间序列数据&#xff0c;绘制到一张图上&#xff0c;每段时间序列数据一般只有几个月&#xff0c;少则 1 个月左右&#xff0c;想看它们的季节规律&#xff0c;需要去除年份&#xff0c;只看月份。 也就是横轴是1月…

44.CSS Grid布局概述

什么是CSS Grid&#xff1f; ● CSS Grid 是一组用于构建二维布局的 CSS 属性 ● CSS Grid 背后的主要思想是我们将容器元素划分为行和列&#xff0c;这些行和列可以填充是子元素。 ● 在两段式语境中&#xff0c;CSS网格允许我们写出更少的嵌套HTML和更容易阅读的CSS ● CSS …

二分查找原理及使用场景

建议使用左闭右开区间[l, r)查找。二分查找的最后&#xff0c;索引l&#xff0c;r会落到右区间第一个元素位置。因此但凡是能够见数组分成左右两个区间的都能应用二分查找法。 1、普通查值 常见问题方式&#xff1a;寻找含重复值的有序数组 [...,a, tar, tar, tar,.b....]&am…

AI制药 - RCSB PDB 数据集的多维度分析与整理 (1)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/130089781 整体&#xff1a; RCSB PDB 数据集是一个收集了蛋白质的三维结构信息的数据库&#xff0c;是世界蛋白质数据库&#xff08;…