# 最大堆
最大堆和最小堆几乎一模一样,唯一的不同之处在于:最大堆所有的节点都大于等于它的子节点,即根结点是最大的,可以快速导出树的最大值。
# js实现最大堆
要实现最大堆,我们只需要把最小堆稍加改变即可,即上移和下沉方法中的进行父子节点互换的条件判断稍加修改,即由BIGGER_THAN改为LESS_THAN。
但是这不等于我们需要复制最小堆的代码然后进行修改,我们可以扩展最小堆,将比较进行反转也可实现。
function reverseCompare(compareFn) {
return (a, b) => compareFn(b, a)
}
class MaxHeap extends MinHeap {
constructor(compareFn = defaultCompare) {
super(compareFn)
this.compareFn = reverseCompare(compareFn)
}
}
# 参考文章
- javascript数据结构与算法第三版
← 最小堆