赤黒木:回転、挿入、削除操作、バランスのとれた二分探索木との違い

1.赤黒木と平衡二分探索木との違い:
平衡二分木(AVL):

  • 空のツリーであるか、またはその左と右のサブツリーの高さの差の絶対値が1を超えていません。 (完全バランス)、そして左と右のサブツリーはどちらもバランスのとれた二分木です。
  • 時間の複雑さは、最良の場合と最悪の場合の両方O(lgn)です。
  • 挿入と削除後の絶対的なバランスを確保するバランスを保つために複数のローテーションが必要、したがって、非常に時間がかかります。

赤黒木:

  • 赤黒の木は完全なバランスの追求をあきらめ、おおまかなバランスを追求
  • 時間の複雑さも、最良の場合と最悪の場合O(lgn)です。
  • だいたいバランスを追求して、多くの回転操作が不要

総括する: AVLツリーは、挿入と削除の数は比較的少ないが検索が多い場合に適しています。挿入と削除の数が多い場合は、赤黒ツリーが適しています。

参考:赤黒木とバランスのとれた二分木の違いは何ですか?
赤黒ツリーとAVLツリー(バランスドバイナリツリー)の違い

2.赤黒の木の性質:
赤と黒の性質を満たす二分探索木
ここに画像の説明を挿入
赤黒ツリーは、リーフノードへのパスが他のパスの2倍にならないことを保証するため、おおよそのバランス、図(a)に示すように。
コードを容易にするために、センチネルを使用して、リーフノードの親ノードとルートノードを示すNULLを表す、図(b)に示すように。
ここに画像の説明を挿入
通常、内部ノードのみが表示されます:
ここに画像の説明を挿入
3.回転操作:赤と黒の性質を維持するために使用されます。
左側と右側:回転後、ノードのスプライシングにより、バイナリ検索ツリーの性質が理解しやすくなります。
左利き(右利き):右(左)の子供になる左(右)の子供。
ここに画像の説明を挿入
擬似コード:
ここに画像の説明を挿入
4.挿入:
手順:
a。二分探索木法に従って葉ノードを挿入します;
b。それを赤に
色付けします; c。赤黒プロパティ調整関数を呼び出して、回転と色変更によって木を赤黒木に変えます。
ここに画像の説明を挿入
コードの17行目:赤黒プロパティ調整関数:
3種類のケース:
**ケース1:zの叔父ノードyが赤:**親ノードが黒になるまで、プロパティ4が満たされるように色を円形に調整します。
ここに画像の説明を挿入
ケース2:tertノードy z黒、zは右の子: Lによってケース3になります。
**ケース3:zの叔父yは黒で、zは左の子です:**赤と黒のプロパティは、右に回して色を変更することによって調整されます。
ここに画像の説明を挿入
全体的なコード:
ここに画像の説明を挿入
ここに画像の説明を挿入
5.削除は
複雑すぎるので、作業で使用するときに学習しましょう。面接の原則を理解し、それをどのように使用するかを知り、どこで勉強するかを知ってください。

総括する:

1.赤黒木は大まかにバランスをとり、AVL木は絶対バランスをとります。
2.二分探索木に基づいて、赤黒木は左右回転と色調整を通じて性質を満たします。
3.赤黒木の性質を理解する。

おすすめ

転載: blog.csdn.net/qq_33726635/article/details/105878932