代码与动画 MIN HEAP
最小堆.
完全二叉树的父节点不大于孩子,堆顶保存最小值。
插入 / 弹出 O(log n)读取堆顶 O(1)演示容量 10
原理与执行逻辑
最小堆是满足父节点不大于孩子的完全二叉树,用数组按层保存。堆顶是最小值,插入和删除只需沿一条路径修复关系。
执行步骤
- 插入时将值追加到数组末尾。
- 新值小于父节点时交换并继续上浮。
- 取最小值时保存根,用末尾元素填补根位置并缩小数组。
- 与较小的孩子比较并下沉,直到父节点不大于两个孩子。
关键理解
完全二叉树保证高度为 O(log n)。堆只约束父子大小,整个底层数组不保证升序;读取堆顶无需遍历。
简短示例
最小堆 [2, 5, 4] 插入 1,追加后与 5、2 依次交换,得到 [1, 2, 4, 5]。
代码与执行动画
STEP 0 / 0const heap = [12, 25, 38, 50];size = 4min = 12
当前数据正在操作已访问 / 命中标记 / 指针
输出 / 辅助状态
底层数组 [12, 25, 38, 50]
0
当前结构
选择操作,观察对应代码和状态变化。
操作当前结构
下一次操作使用上次完成后的数据。重置结构恢复初始示例。
最小堆的操作规则
插入后上浮,弹出后把末尾节点移到根并下沉。节点旁的数字表示底层数组下标。
对应题目与扩展练习
观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。
堆的应用练习;本题反复取最大值,需要将最小堆改为最大堆,或存储负值。