什么是堆(heap)

堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。

这里的堆不是jvm内存模型中的堆,大家不要弄混了。

定义

  1. 堆是是一颗完全二叉树。[1]
  2. 堆中某个结点的值总是不大于或不小于其父结点的值;ki >= k2i +1 且 ki >= k2i + 2。

大根堆

规则:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]

大根堆

小根堆

规则:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]

小根堆

堆的构建

堆的构建一般分为两步:

  1. 第一步是堆化,从堆中的满二叉树尾部开始,构建成一个堆。
  2. 把最大或者最小元素移动到数组尾部,然后重新把堆顶元素进行构建

常见的堆

有二叉堆、斐波那契堆等;


  1. 这叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。需要注意的是,满二叉树肯定是完全二叉树,而完全二叉树不一定是满二叉树

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • “堆”排序 叠罗汉大家都知道吧,就是把人堆在一起,而这里我们要介绍的“堆”结构相当于把数字堆成一个塔型的结构。如图...
    物非0人非阅读 262评论 0 1
  • 一、堆是什么?什么是小根堆? 堆其实就是一棵完全二叉树,那么什么是完全二叉树,如下图: 一棵深度为k的有n个结点的...
    合情合理合法阅读 471评论 0 0
  • 什么是堆排序? 是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:...
    Noxus丶SJ阅读 153评论 0 0
  • 我的博客地址:https://rebornc.github.io/2018/11/15/%E5%A0%86%E6%...
    白夜叉小分队阅读 2,005评论 0 5
  • 点赞关注,不再迷路,你的支持对我意义重大!🔥 Hi,我是丑丑。本文「数据结构 & 算法」| 导读 —— 登高博见[...
    彭旭锐阅读 1,467评论 0 5