私がいることを証明しようとしているバイナリヒープを持つのノードが正確に持って⌈ nは葉は、ヒープは次のように構築されていることを考えます:
percolate upを介して新しいノードがそれぞれ挿入されます。これは、次に使用可能な子で新しいノードをそれぞれ作成する必要があることを意味します。これが意味することは、子供たちはレベルダウンで、左から右に満たされているということです。たとえば、次のヒープ:
0
/ \
1 2
う有し、このために構築されました:0、1、2(数値は、彼らが、そのノードに保持されている実際のデータの兆候を与えない、単に指標です。)
これには2つの重要な意味があります。
レベルkが完全に満たされていなければ、レベルノードは存在できません。
子は左から右に構築されるため、レベルノード間に「空のスペース」、または以下のような状況はありません。
0 / \ 1 2 / \ \ 3 4 6
(これは私の定義では違法なヒープです。)したがって、このヒープを考える良い方法は、ヒープの配列実装です。
だから、私は誘導がおそらくこれを行うための良い方法になると思っていた...おそらくnのための奇妙なケースでさえ対処しなければならない何か。たとえば、この方法で構築されたヒープでさえ、偶数nには1つの子を持つ内部ノードがあり、奇数nにはそのようなノードがないという事実を使用した帰納法です。アイデア?
@DaveClarke:まったくそうではありません。リンクされた質問は、参考のためにそこに残された編集者の部分に対する誤解の結果です。
—
ラファエル
ノード番号またはそれぞれの帰納を試みましたか?挿入数
—
ラファエル
@DaveClarke:なぜですか?それ自体が有効な質問です。
—
ラファエル
ところで、質問はヒープとは関係ありません。請求はいずれかのために保持している完全なバイナリツリー
—
蘭G.