二叉堆实现的优先队列
二叉堆实现的优先队列
二叉堆的定义
二叉堆是一种完全二叉树,分为两类:
- 大顶堆:每个节点值 ≥ 子节点值
- 小顶堆:每个节点值 ≤ 子节点值
基本操作
优先队列主要有两种操作:
- 入队(heappush):将新元素加到数组末尾,然后从下往上调整,恢复堆结构。
- 出队(heappop):将堆顶元素与末尾元素交换,弹出末尾元素,再对新堆顶自上而下调整,恢复堆结构。
内部实现:
- 使用heapq模块实现优先队列
heapq.heappush(heap, item):将元素item压入堆heap中,保持堆结构。heapq.heappop(heap):弹出并返回堆中的最小元素。
注意事项:heapq默认是小顶堆,即每次弹出的是最小值。- 如果需实现「大顶堆」(每次弹出最大优先级元素),可将优先级取负数存入堆中。
- 为保证当优先级相同时元素的入队顺序,通常可额外存储一个自增索引。
1 | import heapq |
应用场景:
- 215.[[数组中的第k个最大元素]]
- 347.[[前k个高频元素]]
- 451.根据字符出现频率排序
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 笺札!





