那么建树的过程可以分为两步,对于每一个值,首先按照建树过程,会到二叉堆的最底部,然后通过不断的让自己与自己的根节点做比较,如果自己大于根节点,就交换自己与根节点的位置,递归回溯即可。 逻辑过程 假设现在红色节点组成的已经是一个大顶堆,现在新增了一个节点到这个二叉堆中,而且是比任意节点都大,那么黑色箭头...
⼩顶堆 每个结点的值都⼩于或等于其左右孩⼦结点的值 对⽐图 实现代码 public class HeapNode{ private int size;//堆⼤⼩ private int[] heap;//保存堆数组 //初始化堆 public HeapNode(int n) { heap = new int[n];size = 0;} //⼩顶堆建堆 public void minInsert(int key){ int...
}//小顶堆删除publicintminDelete(){if(this.size==0)return-1;inttop=heap[0];intlast=heap[this.size-1]; heap[0] = last;this.size--;//堆化minHeapify(0);returntop; }//大顶堆删除publicintmaxDelete(){if(this.size==0)return-1;inttop=heap[0];intlast=heap[this.size-1]; heap[0...
public class HeapNode{ private int size;//堆大小 private int[] heap;//保存堆数组 //初始化堆 public HeapNode(int n) { heap = new int[n]; size = 0; } //小顶堆建堆 public void minInsert(int key){ int i = this.size; if (i==0) heap[0] = key; else { while (i>0 && h...
大顶堆 每个结点的值都大于或等于其左右孩子结点的值 小顶堆 每个结点的值都小于或等于其左右孩子结点的值 对比图 实现代码 public class HeapNode{ private int size;//堆大小 private int[] heap;//保存堆数组 //初始化堆 public HeapNode(int n) { ...