【資料結構】 紅黑樹
一、概念
Red-Black Tree 簡稱 R-B Tree,是一種自平衡二叉查詢樹,是在電腦科學中用到的一種資料結構,典型的用途是實現關聯陣列。
二、特性
(1)每個節點或者是黑色,或者是紅色。 (2)根節點是黑色。 (3)每個葉子節點(NIL)是黑色。 (4)每個紅色節點的子節點都是黑色。 (5)從一個節點到該節點的子孫節點的所有路徑上包含相同數目的黑節點。
注意: (3)中 葉子節點,是指為空(NIL節點,空節點)的葉子節點。 這些約束強制了紅黑樹的關鍵性質: 從根到葉子的最長的可能路徑不多於最短的可能路徑的兩倍長。
三、應用
紅黑樹的應用比較廣泛,主要是用它來儲存有序的資料,它的時間複雜度是O(lgn),效率非常之高。
四、基本操作
1、新增
1)、將紅黑樹當作一顆二叉查詢樹,將節點插入。 2)、將新插入的節點著色為"紅色"。 3)、經過一系列的旋轉或著色操作,使成為滿足五點特性的紅黑樹。
2、刪除
1)、將紅黑樹當作一顆二叉查詢樹,將節點刪除。 2)、經過一系列的旋轉或著色操作,使成為滿足五點特性的紅黑樹。
五、旋轉
基本操作需要知道什麼是旋轉,下面具體說一下,旋轉包括 左旋、右旋
1、左旋
說明一下
1)、如圖Y為X的右孩子。 2)、將Y的左孩子設為X的右孩子,即將b設為X的右孩子。 3)、將X設為Y的左孩子的父親,即將b的父親設為X。 4)、將X的父親設為 Y的父親(這裡X的父親是空節點,因此將Y設為根節點)。 5)、將X設為Y的左孩子。 6)、將X的父節點設為Y。 注:4)還有其他兩種情況(如果X是它父節點的左孩子,則將Y設為X的父節點的左孩子;如果X是它父節點的右孩子,則將Y設為X的父節點的右孩子)。
2、右旋
說明一下
1)、如圖Y的左孩子為X。 2)、將X的右孩子設為Y的左孩子,即將b設為Y的左孩子。 3)、將Y設為X的右孩子的父親,即將b的父親設為Y。 4)、將Y的父親設為X的父親(這裡Y的父親是空節點,因此將X設為根節點)。 5)、將Y設為X的右孩子。 6)、將Y的父節點設為X。 注:4)還有其他兩種情況(如果Y是它父節點的右孩子,則將X設為Y的父節點的右孩子;如果Y是它父節點的左孩子,則將X設為Y的父節點的左孩子)。