优先级队列和堆
堆的存储方式
使用数组来保存二叉树,将二叉树的层序遍历结果按顺序放入数组中。这种方式只适合保存完全二叉树,因为非完全二叉树会浪费空间。
最大堆
满足任意节点的值都大于其子树中节点的值,叫做最大堆。
向下调整建最大堆:
public static void adjustDown(int[] array,int parent,int len) {
int child = parent * 2 + 1; //左孩子
while(child < len) {
//判断是否有右孩子,并找出左右孩子的最大值的下标
if (child + 1 < len && array[child] < array[child + 1] ) {
child ++;
}
//child中存储的就是最大值的下标
if (array[child] > array[parent]) {
//大堆,左右节点最大值和父节点交换
int temp = array[child