イムBツリーを勉強したり、本の中で彼らがいることを言った:Bツリー:非葉ノードを削除しますか?
キーkがノードXおよびXである場合には、xから鍵Kを削除し、葉です。
鍵kがノードxにあり、xが内部ノードである場合は、次のようにします。
a。ノードx内のkに先行する子yが少なくともt個のキーを有する場合、yを根源とするサブツリー内のkの先行キーk 'を見つける。 k 'を再帰的に削除し、xをk'で置き換える。 (k 'を見つけること、それを削除することは、単一の下向きパスで実行することができる)。
b。対称的に、ノードxのkに続く子zが少なくともt個の鍵を有する場合、zを根源とするサブツリーにおいてkの後続k 'を見つける。 k 'を再帰的に削除し、xをk'で置き換える。 (k 'を見つけてそれを削除することは、単一の下向きパスで実行することができる)
c。それ以外の場合、yとzの両方にt-1個のキーしかない場合は、kとzのすべてをyにマージして、xとzの両方のポインタを失い、yには2t-1のキーが含まれます。そして、zを解放し、yからkを再帰的に削除する。
私の質問は次のとおりです。ケース2.a。 誰かが私に説明することができますか?再帰的にkを削除し、xをkで置き換えます。
よろしくお願いいたします。
優れた説明です。 Bツリーにおける挿入および特に削除は、ツリーの上下にある多くのノードの「ローリング」を含む非常に複雑な手順となり得る。このアルゴリズムは、ツリーを常に "バランスのとれた"状態に保つという欲求によってはるかに複雑になりました。したがって、挿入と削除は潜在的に非常に高価な操作なので、ルックアップは一貫して高速にとどまります。 –
どこから40を手に入れましたか? – DarthGizka
40は 'k'の前身で、図には表示されていませんが、' y'の右端のキーです。 'y'の子(答えの括弧内のコメント)。 – karastojko