赤黒木の回転の理解

アウトライン

左と右の手赤黒ツリーは、非常に複雑である情報をオンラインの多くは理解することがより困難であり、そしてここで私は、あまりにも文字通り、左右の手を説明するために考えて言葉を使います。これにより、ユーザーは情報を検索に役立つことがあります。

二分探索木の定義

バイナリ検索ツリーが空のツリーまたは以下の特性を有する二分木である:
1、左の部分木が空でない場合、左の部分木のその値は、すべてのノードは、ルートノードの値未満である;
2、右の子ならツリーがnullでない、右サブツリーの値は、すべてのノードがルートノードの値よりも大きい;
図3は、左と右のサブツリーは、バイナリソートツリーであり、
図4に示すように、無ノード等価鍵が。

赤黒木の定義

赤黒木は何ですか?

赤黒木(英語:赤黒木)は、不平衡二分探索木であり
、左右のサブツリーの高さが1以下であることを保証する必要なし。

コンピュータサイエンスで使用されるデータ構造であり、典型的な使用は、連想配列を実現することです。
それは、「対称バイナリB-木」と呼ばれ、ルドルフ・ベルによって1972年に発明さ
の近代的な名前は1978年にレオJ.GuibasとRobertSedgewickによって書かれたエッセイに由来します。
複雑なツリー構造のブラック・レッド、それは良い最悪の場合動作して実行時間を持って、
そして実際に効率的:それを見つけるために行うことができ、O(logN個)の時間に挿入し、削除し、
N-どこツリー内の要素番号。

特徴的な赤黒木

赤黒木は、各ノードは、色属性を有する二分探索木である色は赤または黒です。
次のように任意の有効な赤黒木のための必須の一般的な要件外の二分探索木では、追加の要件を追加しました:

図1に示すように、ノードは、赤または黒です。
2、根は黒です。
3、すべての葉(リーフノードがNIL)で黒色です。
図4に示すように、各赤ノードは、2つの黒い子ノードを有していなければなりません。(あなたが赤二つの連続するノード間で有することができるrootに葉から)
各リーフは、黒のノードの同じ数を含む任意のノードから全ての単純なパスに、5。

画像

这些约束确保了红黑树的关键特性:
从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。

回転

L

左旋图解(x左边节点逆时针旋转):
         a                
        / \                               
       b   x      ->        x
          / \              / \
         c   d            a   d
                         / \  
                        b   c

図は、xを中心と、親ノードは、左兄弟ノードがBであり、左側の子はc、dは右の子ノードであります

L xは、定数dと右の子ノードを確保することで、直接ノードxの左ノードの反時計回りの回転に関連している、すなわち、bは、Cの
Lのプロセスは、xの親であり、Bが回転する反時計回りに左兄弟ノード、
元の左ノードのx C xの親ノードは、に代替され
、元の左の子ノードのx C xは、元の親ノードの右の子翻訳後反時計方向となります。

 

右回りの

右旋图解(x右边节点顺时针旋转):
         a            
        / \             
       x   b      ->      x  
      / \                / \                  
     d   c              d   a
                           / \
                          c   b

図は、親ノードAであり、ノードの兄弟権利をb、dは左の子であるXを中心と、右の子ノードCは
右回りと左直接X時計回りの回転に関連して、子ノードX D定数ことを保証することです右ノード、すなわちA、Bは、Cの
デキストロースプロセスXは、親ノードA、右の兄弟ノードBであり、同様に右の子ノードCは時計回りに回転されます。
右ノードX C X元の親が、代替案である
オリジナルのx C時計回りに左の子ノードの親ノードXオリジナル右サブ後方翻訳に。

おすすめ

転載: www.cnblogs.com/geektcp/p/11520014.html