1.前言
堆的概念
堆可以看作是一种近似的完全二叉树:堆的每一个节点值都大于等于或小于等于子树中所有节点的值;若堆中每一个节点的值都大于等于子树中所有节点的值,称为大顶堆;若堆中的每一个节点的值都小于等于子树中所有节点的值,称为小顶堆
存储方式
通常使用数组来存储堆,由于堆是一种近似的完全二叉树,我们假设根节点的序号为1,则对于堆中的任意节点i,左子节点的序号为 2 * i,右子节点的序号为 2 * i + 1
二叉堆的概念
二叉堆是一种特殊的堆,每个节点最多有两个孩子节点
伪代码:
public class heap{
int parent(int root){
return root / 2;
}
//左子节点
int left(int root){
return root * 2;
}
//右子节点
int right(int root){
return root * 2 + 1;
}
}
2. 二叉堆的应用---优先级队列
优先级队列概念
是一种数据结构,特点是插入或删除元素的时候,元素能够自动排序
主要操作
主要操作是上浮和下沉,用于保证堆的性质;在优先级队列中,进行插入与删除时,通常是插入先插入到堆底,接着上浮到正确位置;删除通常是将堆顶与堆底元素交换,然后删除该数,接着将调换后的元素下沉到正确的位置,以此维护堆结构