堆可以用数组模拟。假设堆顶在arr[1],那么任意节点 i 的左右子节点分别是 2i 和 2i+1,父节点是i/2.
堆具有以下性质:
大顶堆:arr[i] >= arr[2i] && arr[i] >= arr[2i+1] (i = 1,2…)
小顶堆:arr[i] <= arr[2i] && arr[i] <= arr[2i+1] (i = 1,2…)
push操作
思想:先把新元素插到堆的最后,然后自下而上,不断与父节点比较,让元素往上浮。
以大顶堆为例:
pop操
堆可以用数组模拟。假设堆顶在arr[1],那么任意节点 i 的左右子节点分别是 2i 和 2i+1,父节点是i/2.
堆具有以下性质:
大顶堆:arr[i] >= arr[2i] && arr[i] >= arr[2i+1] (i = 1,2…)
小顶堆:arr[i] <= arr[2i] && arr[i] <= arr[2i+1] (i = 1,2…)
push操作
思想:先把新元素插到堆的最后,然后自下而上,不断与父节点比较,让元素往上浮。
以大顶堆为例:
pop操