堆的知识点和应用

定义

  • 一个完全二叉树

  • 每个节点的值都大于等于(大顶堆)或小于等于(小顶堆)左右子节点的值

存储

由于堆是完全二叉树,所以一般用数组来存储。

用数组表示堆

数组中下标为 i 的节点的左子节点,就是下标为 i∗2 的节点,右子节点就是下标为 i∗2+1 的节点,父节点就是下标为 i/2​ 的节点。

堆化

插入元素-自下向上堆化

新插入的节点放入最后面,如果与父节点之间大小关系不满足定义,就交换两个节点,并继续比较 ,直到满足关系为止。

自下向上堆化

删除堆顶元素-自顶向下堆化

堆顶元素存储着最大值(大顶堆)或者最小值(小顶堆)。一般移除堆顶元素来获得这个值。移除后需要对堆进行调整。

可以把最后一个元素放到堆顶,然后自顶向下进行调整,可以避免破坏完全二叉树结构。

删除堆顶元素时可能破坏完全二叉树结构
删除元素时自顶向下调整

最后更新于

这有帮助吗?