数据结构与算法-二叉堆

2021/11/20 22:09:54

本文主要是介绍数据结构与算法-二叉堆,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

定义

二叉堆本质上是一种完全二叉树,它分为两个类型

  • 大顶堆(最大堆)
    最大堆的任何一个父节点的值,都大于或等于它左、右孩子节点的值
    image

  • 小顶堆(最小堆)
    最小堆的任何一个父节点的值,都小于或等于它左、右孩子节点的值
    image

二叉堆的根节点叫作堆顶
最大堆和最小堆的特点决定了:最大堆的堆顶是整个堆中的最大元素;最小堆的堆顶是整个堆中的最小元素

存储原理

完全二叉树比较适合用数组来存储。用数组来存储完全二叉树是非常节省存储空间的。因为我们不需要存储左右子节点的指针,单纯地通过数组的下标,就可以找到一个节点的左右子节点和父节点。
image

从图中我们可以看到,数组中下标为 i 的节点的左子节点,就是下标为 i∗2 的节点,右子节点就是下标为 i∗2+1 的节点,父节点就是下标为 i/2 取整的节点

典型应用

  1. 优先队列
  2. 利用堆求 Top K问题
    在一个包含 n 个数据的数组中,我们可以维护一个大小为 K 的小顶堆,顺序遍历数组,从数组中取出数据与堆顶元素比较。如果比堆顶元素大,我们就把堆顶元素删除,并且将这个元素插入到堆中;如果比堆顶元素小,则不做处理,继续遍历数组。这样等数组中的数据都遍历完之后,堆中的数据就是前 K 大数据了


这篇关于数据结构与算法-二叉堆的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程