Heap
堆的概念
堆是满足一下性质的树:
- 堆中某个节点的值总是不大于或不小于其父节点的值
- 堆总是一棵完全二叉树
堆的分类
根据堆的节点大小关系,分为大根堆和小根堆。大根堆中每个节点都比它的子节点大,小根堆则是每个节点都比它的两个子节点小
大根堆示意图
小根堆示意图
在数组中储存的下标特征
在储存堆的时候,一个节点如果下标是
堆的操作
以下操作均以大根堆为例
堆的插入
- 每次把一个节点放到数组的最后
- 依次比较它和其父节点的值,如果父节点更小,那么使用
shift up
操作,把当前节点和父节点交换,然后向上递归 - 如果父节点已经比此时调整的调整节点大了,调整结束
时间复杂度是级别的。
堆的删除
堆只支持删除堆顶端的元素
- 找到最后一个插入的元素
- 将最后一个元素和顶部的元素互换
- 向下递归调整进行
shift down
相关文章
[[Leftist heap]]
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.