二叉堆算法详解
基础知识
二叉堆的应用:找出最大/最小值
二叉堆定义:堆是完全二叉树。父结点的键值总是大于等于(小于等于)任何一个子节点的键值。
大根堆:又称最大堆、大顶堆。指根节点值最大的二叉堆
小根堆:又称最小堆、小顶堆。指根节点值最小的二叉堆
二叉堆举例
此图为大根堆
存储方式
存储方式:数组。需注意:堆存储从下标0开始还是1开始,以下例子,从下标0开始存储。
假设父节点下标为i,左孩子节点为2i+1,右孩子结点为2i+2。上图二叉堆的存储形式为:
二叉堆基本操作
上浮和下沉都以大根堆为例。如果不懂建议看第三条参考资料。
上浮
可用插入结点
思路(大根堆):
- 将插入的结点放到二叉堆的最后,即数组的最后一位
- 将插入结点的值A和父结点的值B比较。
- 如果A>B,A的值等于B的值。
- 重复步骤2、3,直至A<=B或插入结点无父节点。
代码:
public void add(int[] array){
int childIndex=array.length-1;
int parentIndex=(childIndex-1