堆(Heap)是一种特别的完全二叉树,满足每个节点的值都不小于(或不大于)其子节点的值,这种性质使得堆能有效地支持一系列与优先级队列相关的操作。堆主要有两种类型:最大堆和最小堆。
最大堆:在最大堆中,任意节点的值都不小于它的子节点的值。这意味着根节点的值是堆中的最大值。这种属性使得最大堆可以用于实现优先级队列,其中优先级最高的元素(即值最大的元素)总是位于队列的前端。
最小堆:在最小堆中,任意节点的值都不大于它的子节点的值。这意味着根节点的值是堆中的最小值。最小堆常用于需要快速访问最小元素的场景,例如实现Dijkstra算法中的优先级队列。
最大堆:在最大堆中,任意节点的值都不小于它的子节点的值。这意味着根节点的值是堆中的最大值。这种属性使得最大堆可以用于实现优先级队列,其中优先级最高的元素(即值最大的元素)总是位于队列的前端。
最小堆:在最小堆中,任意节点的值都不大于它的子节点的值。这意味着根节点的值是堆中的最小值。最小堆常用于需要快速访问最小元素的场景,例如实现Dijkstra算法中的优先级队列。