最小堆 构建、插入、删除的过程图解
1.简介
最小堆是一棵完全二叉树,非叶子结点的值不大于左孩子和右孩子的值。本文以图解的方式,说明
最小堆的构建、插入、删除的过程。搞懂最小堆的相应知识后,最大堆与此类似。
2.最小堆示例
3.最小堆的构建
初始数组为:9,3,7,6,5,1,10,2
按照完全二叉树,将数字依次填入。
填入后,找到最后一个结点(本示例为数字2的节点),从它的父节点(本示例为数字6的节点)
开始调整。根据性质,小的数字往上移动;至此,第1次调整完成。
注意,被调整的节点,还有子节点的情况,需要递归进行调整。
第二次调整,是数字6的节点数组下标小1的节点(比数字6的下标小1的节点是数字7的节点),
用刚才的规则进行调整。以此类推,直到调整到根节点。
以下是本示例的图解:
注意:数字9的节点 将和 数字1的节点 发生对调,对调后,需要递归进行调整,请一定注意。
4.最小堆的元素插入
以上个最小堆为例,插入数字0。
数字0的节点首先加入到该二叉树最后的一个节点,依据最小堆的定义,自底向上,递归调整。
以下是插入操作的图解:
5.最小堆的节点删除
对于最小堆和最大堆而言,删除是针对于根节点而言。
对于删除操作,将二叉树的最后一个节点替换到根节点,然后自顶向下,递归调整。
以下是图解:
注意:
如您发现本文档中有明显错误的地方,
或者您发现本文档中引用了他人的资料而未进行说明时,请联系我进行更正。
转载或使用本文档时,请作醒目说明。
必要时请联系作者,否则将追究相应的法律责任。
note:
If you find this document with any error ,
Or if you find any illegal citations , please contact me correct.
Reprint or use of this document,Please explain for striking.
Please contact the author if necessary, or they will pursue the corresponding legal responsibility.
最小堆 构建、插入、删除的过程图解相关推荐
- 最详细的最小堆构建、插入、删除的过程图解
转载:http://blog.csdn.net/hrn1216/article/details/51465270 1.简介 最小堆是一棵完全二叉树,非叶子结点的值不大于左孩子和右孩子的值.本文以图解的 ...
- 再写堆(堆的性质,向下调整,建堆,堆的插入删除初始化,堆排序,TopK问题)
堆的概念 如果有一个关键码的集合K={k0,k1,k2,-,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储再一个一维数组中,并满足:Ki<=K2i+1且Ki<=K2i+1(Ki ...
- python 最小堆类型: heapq
目录 1.heapq 的常用方法 2.几个例子 a.最小堆的创建以及增删 b.如何使用 heapq 创建最大堆 c.获取第 k 大/第 k 小数据 d.列表中的元素是元组 heapq 是 python ...
- 最大堆与最小堆的实现
最近算法课作业是最小堆,于是便顺便写了这个代码 最(大)小堆的性质: (1)是一颗完全二叉树,遵循完全二叉树的所有性质. (2)父节点的键值(大于)小于等于子节点的键值 (3)在堆排序中我们通常用的是 ...
- 堆的构建、堆的插入、堆的删除、堆排序
如果你不了解堆是如何构建.插入.删除.堆排序的原理,可以点击下面连接,有详细的图解,让你知道逻辑原理. http://blog.csdn.net/u011068702/article/details/ ...
- 最大堆,最小堆插入/删除以及最大堆的排序
先说一下最大堆如何排序:转自:http://www.cnblogs.com/luchen927/archive/2012/03/08/2381446.html 最大堆和最小堆在算法中也有运用.比如用最 ...
- 贪心算法之最小堆实现霍夫曼编码
贪心算法之最小堆实现霍夫曼编码 实现之前需要学习的地方: 如果你不了解堆.堆的插入.堆的删除,可以先看下我前面几篇博客 http://blog.csdn.net/u011068702/article/ ...
- LeetCode——347. 前 K 个高频元素【最小堆实现】
LeetCode--347. 前 K 个高频元素[最小堆实现] 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例1: 输入: n ...
- java 最小堆_堆排序 最大堆 最小堆 Java 实现
堆 一点疑惑,堆排序是就地排序,所以空间复杂度是 O(1).但是,比如我有一个数组,建立一个最小堆,然后每次取出最小堆的顶点.建立最小堆需要额外空间? 不深究了,归并排序需要额外空间. 堆是完全二叉树 ...
最新文章
- 使用JSP/SERVLET实现在校学生管理系统
- 【Android UI设计与开发】第11期:顶部标题栏(二)ActionBar实现Tab选项卡和下拉导航列表
- python代码格式-设置Python代码格式
- 软考考后常见问题汇总
- 数据库元数据数据字典查询_2_列出所有的数据库
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第28篇]什么是公钥密码学的IND-CCA安全定义?
- 在Activity启动过程中如何任务栈的栈顶是否是将要启动的Activity的实例
- 函数式编程语言:LISP/Scheme 小语种简介
- asp.net下url参数含有中文读取后为乱码
- 开源风云 20 年!
- 【GNN】图神经网络入门之GRN图循环网络
- 63. Event button 事件属性
- ISO-国际标准化组织
- 从一个线上问题看 Elasticsearch 数据清洗方式
- 用优启通制作U盘启动盘教程(UEFI版)
- Android 带裁剪功能的照片处理方法
- 西门子SMART 200 modbus rtu通讯宇电温控器例程
- iPhone再添新配色: 黄铜色?
- 手机上安装ubuntu
- powerbi服务器打开文件慢,Power BI 优化指南
热门文章
- 弹出 文件 选择 html代码,HTML+CSS点击按钮弹出文件选择框的最佳方案
- 2021-08-19C++基本语法——多态
- 6G中的卫星通信高效天基计算技术
- Java实现简单推优投票程序
- Nero Burning Rom v7.10.1.0 简体中文版 2007-7-6
- mysql数据库索引案例_MySQL 数据库案例优化分享-爱可生
- 如何优雅把分不失精度转换成元
- redmine mysql 配置_Redmine 2.0.3 安装配置
- 自动化测试之获取mysql中的数据
- 微信小程序中高清图片替换加载策略