我正在实现最小最大值堆,这是一种双端优先级队列。你可以看这里here关于最小最大堆的更多信息。最小最大堆中的删除最大值操作
插入和删除分钟操作的代码很简单,可以在网上获得。但是,我也试图在最小 - 最大堆上执行delete-max操作。最初,我觉得min-max堆中的delete-max与max-min堆中的delete-max相同(如果我们考虑包含最大元素的min-max堆的子树,它类似于max-分钟堆)。因此,实现将很简单,类似于min-max堆的delete-min。
但是,有一个问题:
如在上面的图中可以看出,虽然图70是最大元件,最后元件(12)的最大 - 最小堆的不包含70的子树。那么,我可以用它来代替删除70后留在左侧子树中的空位吗?
如果我们不使用该元素,而是遵循最大最小堆的删除-MAX程序,并使用20来代替差距,插在堆中的下一个元素将是在10和永远正确的孩子将没有右边的孩子9.
那么,任何人都可以帮助我吗?
由于关于删除随机密钥的问题与如何在delete-max之后修复堆的问题不同,因此我会考虑将其作为一个单独的问题。 – templatetypedef
@templatetypedef编辑此问题以关注“如何删除最大元素”。现在,您可以在此处找到一个关于“如何从最小 - 最大堆中删除任何节点”的建议解决方案的具体问题:http://stackoverflow.com/q/39392864/3924118 – nbro