说在前面
我第一次接触堆这个东西是在做堆排序的时候。这玩意还不错,难度也不大,可以用的地方很多,值得玩一玩。
前置知识:
完全二叉树
完全二叉树 ,顾名思义是一种二叉树就是说 (假设树根深度为1 )深度为k的二叉树 ,第1至第k-1层的结
点都是满的,也就是说 ,如果一颗二叉树满足第i(1<=i<=K-1)层的结点数为2 * i-1 ,0<第K层的结点数
<=2 * k-1 ,并且最下面一层的结点都集中在该层最左边的若干位置 ,那么它就是一颗完全二叉树。
like this:
堆的性质及其基本操作:
堆的性质
1.编号为i的结点的左二子的编号为2 * i ,右儿子编号为2 * i + 1 ,父结点编号为i / 2 (假设有)
2.n个结点的堆的高度为log2(n + 1)的对数
3.h[i] <= h[2 * i], h[i] <= h[2 * i + 1] (或者 h[i] >&