美文网首页
【阅读笔记】——什么是二叉堆

【阅读笔记】——什么是二叉堆

作者: astak3 | 来源:发表于2019-04-28 22:21 被阅读0次

什么是二叉堆

二叉堆的本质是一种完全二叉树,它分为两种类型:最大堆和最小堆

最大堆任何一个父节点的值,都大于等于它左右孩子的值,最小堆正好与之相反

[图片上传失败...(image-25a0af-1556461270759)]

二叉树的根节点叫做堆顶

最大堆和最小堆的特点是:最大堆的堆顶是整个堆中的最大元素,最小堆的堆顶是整个堆中的最小元素

堆的自我调整

对于二叉堆有几种操作

  • 插入节点
  • 删除节点
  • 构建二叉堆
    这几种操作都是基于堆的自我调整

我们以最大堆为例,分析下堆的自我调整

插入节点

二叉堆的节点插入位置是完全二叉树的最后一个位置,我们插入一个新节点,值为11

[图片上传失败...(image-9aa082-1556461270759)]

这时候,我们让节点11和父节点5作比较,如果11大于5,则交换他俩交换位置,称为“上浮”

image

继续用节点11和父节点8进行比较,如果节点11大于节点8,则让节点11继续“上浮”

[图片上传失败...(image-5da876-1556461270759)]

继续比较,最终让节点11上浮到堆顶位置

[图片上传失败...(image-ff3bdc-1556461270759)]

删除节点

二叉树删除节点的过程和插入过程正好相反,它每次都是从堆顶删除,将堆顶的节点与与最后一个节点交换位置

[图片上传失败...(image-9302d2-1556461270759)]

然后将堆顶的节点5和它两个孩子进行比较,显然节点10比较打,让他俩交换位置,称为“下沉”

[图片上传失败...(image-5a328e-1556461270759)]

继续让节点5和它的孩子做比较,显然大的是节点8,让节点5继续下沉

[图片上传失败...(image-9bf116-1556461270759)]

此时就重新构建的二叉树。

构建二叉树

构建二叉树,就是把一个无序的完全二叉树调整为二叉堆,本质上就是让所有非叶子节点一次下沉(上浮)

  • 构建最大堆:节点大的上浮,小的下沉
  • 构建最小堆:节点小的上浮,大的下沉

文章:什么是二叉堆?

相关文章

  • 【阅读笔记】——什么是二叉堆

    什么是二叉堆 二叉堆的本质是一种完全二叉树,它分为两种类型:最大堆和最小堆 最大堆任何一个父节点的值,都大于等于它...

  • 什么是堆排序

    阅读原文 理解堆排,首先要理解二叉堆。理解了二叉堆的“下沉”操作,基本上就可以理解堆排了。今天我们来看一看什么是堆...

  • 二叉树(二)-二叉堆

    1.什么是二叉堆 二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。二叉堆有两种:...

  • 二叉堆

    二叉堆定义 二叉堆是一种特殊的堆, 二叉堆是完全二叉树或者近似完全二叉树. 二叉堆满足堆特性: 父节点的键值总是保...

  • HeapSort学习笔记

    完全二叉树 堆排序 什么是堆(Heap)? 堆本质上是一棵二叉树,而且是完全二叉树。 (注:从严格意义上讲,堆可以...

  • 二叉堆的Python实现

    二叉堆(binary heap)是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足堆特性:父节点的...

  • 二叉堆与优先队列

    二叉堆 什么是二叉堆?二叉堆本质上是一种完全二叉树,它分为两个类型。 最大堆。最大堆的任何一个父节点的值,都大于或...

  • 认识二叉堆

    什么是二叉堆? 二叉堆本质上是一种完全二叉树( 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引...

  • 编程马拉松 Day05 堆、二叉堆、堆排序

    堆 堆排序需要用到二叉堆,在开始之前,我们先来了解一下什么是二叉堆。 当二叉树满足满足如下条件时,我们说这个二叉树...

  • 二叉堆(Binary Heap)

    什么是二叉堆 二叉堆是一颗特殊的二叉树(完全二叉树) 父节点一定都不大于左右节点(小顶堆) 树的每一层都从左到右一...

网友评论

      本文标题:【阅读笔记】——什么是二叉堆

      本文链接:https://www.haomeiwen.com/subject/qxysnqtx.html