- 基础数据结构
想象我们有一个数组,数组中有0到9,10个元素。
我们按照顺序将一颗二叉树画出来。
- 如果我们将数据填入数组之中,树种相应节点的值也将填入。
这里我们观察到,树中节点之间存在如下关系:
假设当前节点的下标为i ——
节点的左子节点的下标为:2 * i + 1;
节点的右子节点的下标为:2 * i + 2;
- 大顶堆和小顶堆
我们知道大顶推满足的条件是每一个父节点都比子节点大。
那么我们应该如何通过调换节点的位置来构建这样的数据结构呢?
我们取这个树的一个片段,假设数据为2,1,3。那么我们需要进行的一个操作是heapify-down,通过将2和1与3中比较大的节点替换位置,以此来满足条件。
这是我们调整的过程。
我们观察可知,对于一颗长度为10的树(堆),我们自上而下只需要将节点4,3,2,1,0分别进行heapify既可以满足大顶堆的满足条件。
建堆代码:
//build max heap
public void buildHeap(int