赤黒木をやってみよう 2

ちょっと複雑な挿入

前回挿入をしたのはいつも大きい数字だったので比較的

単純にいきました。今度は少し複雑な挿入をやってみよう。

 

ルール

  1. 赤の子に赤が来ることはできない。

赤の子に赤が来るパターンとはどのようなものでしょうか?

  1. 赤の右の子が赤
  2. 赤の左の子が赤

の2つにわかれます。そしてもちろんその赤の親は黒になります。

では実際にやってみよう!

f:id:yamshing:20150625214845p:plain(く)

まずは新ノード6を挿入。5の右側に場所がみつかった。

これは赤の右の子が赤のタイプだ。このタイプはまず左に回す。

f:id:yamshing:20150625215056p:plain(ノ)

そしてそれを右に回す。

f:id:yamshing:20150625223658p:plain(一)

あとはいつも通り2つの赤の子の色を反転していく。

f:id:yamshing:20150625223822p:plain

f:id:yamshing:20150625223917p:plain

おしまい

なんで”くノ一”と書いてあるの?

よーく見てください。

赤ノードが”くノ一”に見えませんか?

このパターンを”くノ一”の”く”パターンとしましょう。

次の”赤の左の子が赤”をみてみましょう!

f:id:yamshing:20150625224513p:plain(ノ)

こんなのはどうでしょう?

見てください。これはノになっています。

ではさっきのように

f:id:yamshing:20150625224659p:plain(一)

右に回します。

あとはいつも通り色の交換。

f:id:yamshing:20150625224825p:plain

どうでしたか?

結局このパターンはくノ一の”ノ”パターンと言えるでしょう。

じゃあ”くノ一の””一”のパターンは?

それは親の赤の兄弟のノードが赤の時です。

f:id:yamshing:20150625225427p:plain

例えばこんな風に1のノードが挿入されるときです。

だけど2個の赤ノードが来たら色交換をするのでこのパターンはありえないですね。

赤黒木の挿入は”くノ一”と覚えましょう!

<参考>Red-Black Tree by Java -- これで分かった赤黒木