【あかくろぎ】
赤黒木 とは?
最終更新:
💡 色分けルールで「自動的にバランスを保つ」木
ノードに赤か黒の色を持たせて平衡を保つ二分探索木。挿入・削除・検索がO(log n)で安定動作する。
📌 このページのポイント
普通の二分探索木じゃダメなの?
単純な二分探索木は挿入順で偏ることがあるよ。ソート済みの値を順に入れると一直線になり、検索がO(n)まで遅くなる場合がある。赤黒木は挿入・削除後に色の変更や必要な回転で規則を保ち、高さをO(log n)に抑えるんだ。左右の形が完全に同じになる必要はないよ。
どんなルールがあるの?
よく使う定義では、①各ノードは赤か黒、②根は黒、③空の子を表すNILは黒、④赤の子は黒、⑤あるノードからどのNILへ進んでも黒ノード数が同じ、という規則があるよ。値を持つ末端ノードとNILは別なんだ。赤の連続を防ぎ黒ノード数をそろえることで、長い経路だけが伸びすぎないようにするんだ。
AVL木とどう違うの?
AVL木は各ノードの左右の高さの差を1以内に保つ。赤黒木は色の規則で高さを抑えるので、条件はもう少しゆるいんだ。どちらも主要操作は最悪O(log n)。ただし「検索は必ずAVL、更新は必ず赤黒木が速い」とは言えないよ。回転数だけでなく、実装やデータの順番、操作の割合などを比べる必要があるんだ。
実際にどこで使われてる?
まとめ:ざっくりこれだけ覚えればOK!
「赤黒木」って出てきたら「色のルールで自動バランスする高速な木構造」と思えればだいたいOK!
📖 おまけ:英語の意味
「Red-Black Tree」 = 赤黒木
💬 ノードをRed(赤)とBlack(黒)に色分けしてバランスを保つ木構造だよ