ガーデンは、ブロガーのブログskywang123456(以下、Sブロガーと呼ばれる)が大きい牛クラスの人々は、私は私も例外、および利益午前、多くのプログラマは、彼のブログを読んでいると信じています。しかし、記事はのためのJavaのバイナリヒープを達成するために(C)私は、いくつかの疑問を持っている素敵なリングの参照のためにここに書きます。挿入されたバイナリヒープのために、それは比較的簡単な方法であり、問題はありません。バイナリヒープの削除が実際に実際には、もう少し複雑な動作している間、彼が不明確少し恍惚を感じたときには、私が最初にこのブログを読んで。一般的に、つつヒープの削除先頭に削除バイナリヒープは、タイプに分割され、検索が削除しました。ヒープのトップは、ルックアップタイプ削除します名前はイタリアを示唆することによって達成することができ、直接ヒープの先頭に削除データは、広くバイナリヒープ内の実用的な用途で使用されています。指定されたパラメータの場所で見つかった削除タイプを探すために最初にすることは、その要素を削除します。そして、私は問題ではなく、私は2つの異なる説明します削除されたコードの選択肢タイプのヒープのブロガーのトップを削除するために、コードを使用することであると指摘したいと思います。
ブロガーのを初めて目には、コードを削除します
公共 int型の削除(Tデータ){ // "ヒープ"が空の場合、戻り値-1 IF(mHeap.isEmpty()== trueに) 復帰 -1 ; //は、データの配列へのインデックスを取得する int型のインデックス= mHeap。 indexOf(データ); IF(インデックス== - 1 ) リターン -1 ; INTサイズ= mHeap.size(); mHeap.set(インデックス、mHeap.get(サイズ -1)); // 最後の要素で埋め mHeap。削除(サイズ- 1); // 最後の要素を削除する IF(mHeap.size()> 1 ) filterdown(インデックス、mHeap.size()-1); // 最小ヒープに調整されるトップダウン位置からインデックス番号を開始 戻り 0 ; }
保護された ボイド filterdown(INTスタート、INT エンド){ int型 C =スタート; // 現在位置(現在の)ノード INT L = 2 * C + 1; // 左(左)子位置 T TMP = mHeap.get( C); // 現在の(ノードの現在の)サイズ ながら(L <= エンド){ int型 CMP = mHeap.get(L).compareTo(mHeap.get(1 + L。 )); // "L"は、左の子であります、 "+ 1 lが"の右の子である IF(L <エンド&& CMP <0 ) L ++; // 大きい選択された二人の子供、すなわちmHeapについてのL + 1] CMP =tmp.compareTo(mHeap.get(L))。 もし(CMP> = 0 ) ブレーク。 // 调整结束 他{ mHeap.set(C、mHeap.get(L))。 C = L。 L = 2 * L + 1 。 } } mHeap.set(C、TMP)。 }
次に、データを削除した後、ヒープの終わりに尾をパディング見出さノードヒープデータを認識されるであろう最小までスタックからノードを調整します。(ビジュアルタイプミスは、最大ヒープでなければなりません)
ブロガーのは、テキスト内の2つの例を削除します。最初の要素には、ルートノードが存在しないのでそう、ヒープの最上部を除去することです