私は最小-最大ヒープを実装しています。これは両端のプライオリティ キューの一種です。min-max ヒープの詳細については、こちらを参照してください。
挿入操作と最小削除操作のコードは単純で、ネット上で入手できます。しかし、 min-max ヒープにdelete-max操作を実装しようとしています。
最初は、min-max ヒープの delete-max は max-min ヒープの delete-max と同じだろうと感じました (最大の要素を含む min-max ヒープのサブツリーを考えると、max-min ヒープに似ています)。したがって、実装はシンプルで、min-max ヒープの delete-min に似ています。
しかし問題がある:
上の図からわかるように、最大要素は 70 ですが、min-max ヒープの最後の要素 (12)は、70 を含むサブツリーにはありません。したがって、それを使用して、左のサブツリーに残されたギャップを置き換えることができますか? 70の削除後?
その要素を使用せず、代わりに max-min ヒープの delete-max 手順に従い、20 を使用してギャップを置き換えると、ヒープに挿入される次の要素は 10 の右の子になり、右の子は永久になくなります。 9の。
それで、誰かが私を助けることができますか?