データ構造への平衡二分木の挿入と削除における左巻き、右巻き、左右両手、右左両手について詳しく解説(トピックの説明はシンプルでわかりやすい)

多くの初心者は、ここでの回転操作が私と同じように非常に抽象的であると感じると思いますが、実際には非常に単純で、挿入または削除が何であるかを理解して、対応する回転を実行するだけです。

バランスの取れた二分木の定義

バランスの取れたツリー (バランス ツリー、BT) は、任意のノードのサブツリーの高さの差が 1 以下であることを意味します。一般的な平衡ツリーには、B ツリー(多方向平衡探索ツリー)、AVL ツリー (二分平衡探索ツリー) などがあります。バランスのとれたツリーは、コレクションに対する一連の操作を完了でき、 その時間計算量空間計算量は「2-3 ツリー」よりも低くなります。コレクションに対する一連の操作のバランスを常に維持し、方法を提供します。大規模なデータベースの編成とインデックス作成のための新しい方法[1] 

「2-3木」の各ノードは、アプリケーション問題に関するデータの集合を格納しており、識別子としてキーワード(0以上の整数)を持っているものとする。キーワードの格納規則は次のとおりです: ノード X の場合、左、中、右のサブツリーが空ではないと仮定すると、左のサブツリー内の任意のノードのキーワードは、中央のサブツリー内の任意のノードのキーワードより小さくなります。ツリー内の任意のノードのキーはノード X のキーより小さく、X のキーは右側のサブツリー内の任意のノードのキーより小さいため、この「2-3 ツリー」はバランスのとれたツリーと呼ばれます。

バランスの取れた二分木への挿入

試験問題では挿入が頻繁に行われますが、挿入によってバランスが崩れた場合には、ノード間の関係を調整してバランスを取り直す必要があります。具体的には以下のタイプに分けられます。

1:LLバランス回転(右片回転)

この不均衡の理由は、ノード A の左側の子の左側のサブツリーに新しいノードが挿入され、 A のバランス係数が 1 から 2 に変化してバランスが崩れたためです。このとき、右回転操作が必要になります。 、そしてA の左の子 B が A の代わりに右に回転してルート ノードになり、A ノードを右に下に回転して B の右サブツリーのルート ノードになり、B の元の右サブツリーが左として使用されます。 A ノードのサブツリー、テキストの説明はまだ非常に抽象的です。以下のトピックで詳しく説明します。

2:RRバランス回転(左単回転)

新しいノードがノード A の右側の子の右側のサブツリーに挿入されるため、A のバランスが -1 から -2 に減少し、A をルートとするサブツリーのバランスが崩れ、左回転操作が必要になります。 Aの右の子BがAの代わりに左に移動してルートノードになり、Aノードが左下に回転してBの左サブツリーのルートノードになり、Bの元の左サブツリーがAノードの右サブツリーとして使用されます 

 3:LRバランス回転(最初は左、次に右の2回転)

A の左の子の右サブツリーに新しいノードを挿入するので、このとき 2 回の回転が必要で、まず A ノードの左の子 B の右サブツリーのルート ノード C を左に回転し、 B ノードのルート ノードをプロモートし、C ノードを A ノードの位置まで右に回転します。上記 2 つの回転を理解していれば、この組み合わせた回転も非常に簡単です。

 4:RLバランス回転

新しいノードが A の左の子の右のサブツリーに挿入されるため、最初に右回転、次に左回転という 2 つの回転操作が必要です。最初に、ノード A の右の子 B の左のサブツリー ルート ノード C が次のように回転されます。右にノード B の位置まで持ち上げてから、ノード C を左に回転させてノード A の位置まで持ち上げます 

バランスのとれた二分木の削除

これは挿入操作に似ています。削除により不均衡が生じた場合は、上に戻って最初の不均衡ノードを見つけ、上記の不均衡の性質に従って回転します。挿入との違いは、調整が必要な場合があることです。削除時 複数のサブツリーが複数回回転する一般的な解決策があるとは言い難いですが、上で挿入した 4 つの回転操作を理解するのは非常に簡単です。

作成するのは簡単ではありませんが、役立つと思いますので、いいね、フォロー、収集してください~~~

おすすめ

転載: blog.csdn.net/jiebaoshayebuhui/article/details/130400974