转载:http://blog.csdn.net/hrn1216/article/details/51465270

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.最小堆的节点删除

对于最小堆和最大堆而言,删除是针对于根节点而言。

对于删除操作,将二叉树的最后一个节点替换到根节点,然后自顶向下,递归调整。

以下是图解:

最详细的最小堆构建、插入、删除的过程图解相关推荐

  1. 最小堆 构建、插入、删除的过程图解

    1.简介 最小堆是一棵完全二叉树,非叶子结点的值不大于左孩子和右孩子的值.本文以图解的方式,说明 最小堆的构建.插入.删除的过程.搞懂最小堆的相应知识后,最大堆与此类似. 2.最小堆示例 3.最小堆的 ...

  2. 再写堆(堆的性质,向下调整,建堆,堆的插入删除初始化,堆排序,TopK问题)

    堆的概念 如果有一个关键码的集合K={k0,k1,k2,-,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储再一个一维数组中,并满足:Ki<=K2i+1且Ki<=K2i+1(Ki ...

  3. 堆的构建、堆的插入、堆的删除、堆排序

    如果你不了解堆是如何构建.插入.删除.堆排序的原理,可以点击下面连接,有详细的图解,让你知道逻辑原理. http://blog.csdn.net/u011068702/article/details/ ...

  4. 贪心算法之最小堆实现霍夫曼编码

    贪心算法之最小堆实现霍夫曼编码 实现之前需要学习的地方: 如果你不了解堆.堆的插入.堆的删除,可以先看下我前面几篇博客 http://blog.csdn.net/u011068702/article/ ...

  5. python 最小堆类型: heapq

    目录 1.heapq 的常用方法 2.几个例子 a.最小堆的创建以及增删 b.如何使用 heapq 创建最大堆 c.获取第 k 大/第 k 小数据 d.列表中的元素是元组 heapq 是 python ...

  6. 最大堆与最小堆的实现

    最近算法课作业是最小堆,于是便顺便写了这个代码 最(大)小堆的性质: (1)是一颗完全二叉树,遵循完全二叉树的所有性质. (2)父节点的键值(大于)小于等于子节点的键值 (3)在堆排序中我们通常用的是 ...

  7. 最大堆,最小堆插入/删除以及最大堆的排序

    先说一下最大堆如何排序:转自:http://www.cnblogs.com/luchen927/archive/2012/03/08/2381446.html 最大堆和最小堆在算法中也有运用.比如用最 ...

  8. java 最小堆_堆排序 最大堆 最小堆 Java 实现

    堆 一点疑惑,堆排序是就地排序,所以空间复杂度是 O(1).但是,比如我有一个数组,建立一个最小堆,然后每次取出最小堆的顶点.建立最小堆需要额外空间? 不深究了,归并排序需要额外空间. 堆是完全二叉树 ...

  9. 堆 最小堆 最大堆 堆排序(小到大,大到小)

    导航 1.了解什么是堆 2.如何创建最小堆,最大堆 3.新增值在堆中如何进行 4.完整的堆排序,升序和降序(两种方式) ---------------------------------------- ...

最新文章

  1. Firefox 44.0将在Linux上启用H.264支持:GTK3仍缺席
  2. RecyclerView的滚动事件OnScrollListener研究
  3. Puppeteer设置浏览器代理的三种思路
  4. centos 开机执行的命令
  5. 函数表达书-读书笔记
  6. Java虚拟机组成详解
  7. 《团队激励与沟通》第 4 讲——有效沟通与沟通的障碍 重点部分总结
  8. C/C++指针 引用
  9. 《System语言详解》——3. SystemTap脚本的各大组件
  10. SCI科技论文写作成长营(完整版)
  11. Chrome不保留历史记录,常规模式下不保留历史记录
  12. 如何将CHM转换为PDF文件?
  13. 计算机网络中rtd,一文了解Modern Standby与RTD3
  14. 【Zeekr_Tech】汽车软件敏捷开发和分支管理
  15. oppo便签误删怎么办_OPPO手机便签删除了怎么恢复?有无需登录云端就可以恢复的备忘录软件吗...
  16. pythonic的典故_旷视开源深度学习框架「天元」,提供人人可用的AI“生产力工具”【星特写】...
  17. 如何设置计算机的网络参数,如何为计算机新手简单地设置路由器的基本参数
  18. VS插件--Resharper
  19. 华子机试 计算足球赛比分 java
  20. Attention Is All You Need读后感

热门文章

  1. 使用 ML.NET 进行保险价格预测
  2. 又到618,.NET 千万级秒杀架构到底有多牛
  3. .NET架构小技巧(7)——做好小的项目
  4. 将 WinForms 应用从 .NET Core 3.0 升级到 3.1
  5. 【.NETCore 3】Ids4 ║ 多项目集成统一认证中心的思考
  6. dotNET Core 中怎样操作 AD?
  7. MediatR-进程内的消息通信框架
  8. surging 微服务引擎 2.0 会有多少惊喜?
  9. 老牌开源Office操作组件NPOI现已支持.NET Core
  10. 【.NET Core项目实战-统一认证平台】第九章 授权篇-使用Dapper持久化IdentityServer4...