検索 - 平衡二分木

まず、定義

バイナリソートツリーの時間複雑度はO(n)は、時間の複雑バランスバイナリソートツリーは、O(LOGN)であります

AVLバランスの取れたバイナリツリーとも呼ばれ、それは、特別なバイナリ・ソートツリーで高いクエリの効率を有します。または平衡二分木空、又は非ヌルバイナリツリーTの以下の性質を満たします。

  1. Tの左の部分木の深さと1以上ではないの右サブツリーの差の絶対値。
  2. T左部分木と右のサブツリーが平衡二分木です。

平衡二分木ノードT因子BF(バランス因子)は、種右サブツリーの左サブツリー深マイナス深さ


アルゴリズムの第2、アイデア

バランス係数がツリーノードに表示されるバランスのうち、元の平衡二分木、すなわちようにバランスの取れた二分木を確立するプロセスにおいて、それぞれの新しいキーワードを挿入し、新しいキーワードが挿入されるかどうかを確認するためにチェックされるべきである1の絶対値よりも大きいです。あなたはバランスのバランス調整の外にする必要がある場合。


第三に、バランス調整

  • バランスのうち、他の全てのサブツリー内の既存の不均衡を調整することなく、最小限のツリー平衡サブツリーに調整された場合、全体バイナリソートツリーは、バランスの取れた二分木となるであろう。

  • 最小不平衡サブツリー:挿入ノードに最も近い距離、およびルートとノードのサブツリーとしてバランス係数よりも大きな絶対値を有します。

(1)LLバランス回転法

挿入ポイントは、サブツリーサブツリー最小不均衡Zhizuoサブツリーを残しています。

ノードFは、A、Bの左側の子の左サブツリーに挿入されているので、平衡係数は、バランスのうちの1及び2増加しました。従って、時計回りの回転操作の必要性。Aの左の子Bの回転の代わりに、ルートとしては、右の約右部分木の回転Bのルートになる権利です。そして、元のBのAの右部分木は左のサブツリーになります。
ここに画像を挿入説明

(2)RRバランス回転法

挿入ポイントは、サブツリー最小不均衡の右サブツリーの右の部分木です。

バランス係数A -1 -2失うバランスによって低減されるように、ノードFは、A、Cの右側の子の右サブツリーに挿入されているからです。したがって、反時計回りに回転させる操作が必要とされています。代わりに、ルート左右の子AのCのように来るの回転は、回転が左サブツリーCのルートになるまで放置しました 元Cの左部分木は、Aの右部分木になります。

ここに画像を挿入説明

(3)LRバランス回転法

挿入ポイントは、最小のサブツリー不平衡左サブツリー右側サブツリーです。

右側の挿入ノードFのでA、Bの子の数の左、平衡係数は、バランスのうちの1及び2増加しました。したがって、2つの回転動作(時計回りの後、第1のカウンタ)の必要性。

  1. Dは、ノードBの回転位置に昇格第B A左の子ノードの右サブツリーのルートに残され
  2. ノードDは、次いで、回転リフト・ノードを位置決めするために右に置きます。すなわち、まず、LLタイプを作るLLタイプのプロセスを押し、です。

ここに画像を挿入説明
中間状態の調整は以下の通りである(のステップに対応する:ルートノードA DのB左の子の右の部分木は、左ノードBの回転位置まで上昇しました)
ここに画像を挿入説明

(4)RLバランス回転法

挿入ポイントは、サブツリーの不均衡の右部分木Zhizuo最小限のサブツリーです。

バランス係数A -1 -2失うバランスによって低減されるように、ノードFは、A、Cの右側の子の左サブツリーに挿入されているからです。したがって、2つの回転操作の必要性(反時計最初時計回り)。

  1. D左サブツリーのルートノード右へ第1の右の子ノードCは、ノードCの回転位置を持ち上げます
  2. ノードDと、左側には、ノードの回転位置を持ち上げます。どのRRプロセスを入力し、そのタイプのRRにすることです。

ここに画像を挿入説明

前記中間状態の調整は次のように(ステップに相当する:右の子ノードAの左の部分木のルートDのCノードCの回転位置を持ち上げるために右へ)

ここに画像を挿入説明

おすすめ

転載: blog.csdn.net/starter_____/article/details/93875517