一、紅黑樹Red-black Tree:
` 紅黑樹一種自平衡二叉查找樹,是計算機科學中用到的一種數據結構,典型用途是實現關聯數組。紅黑書很複雜,但是他的操作有良好的最壞情況運行時間,不管是查找、插入和刪除,他的時間複雜度都是O(logn),其中的n是樹中元素的數目。
二、二叉查找樹Binary Search Tree:
` 二叉查找樹也稱二叉搜索樹、有序二叉樹(ordered binary tree)、排序二叉樹(sorted binary tree)。是指一顆空樹或者具有以下性質的二叉樹:
(1)若任意節點的左子樹不爲空,則左子樹上所有節點的值均小於它根節點的值。
(2)若任意節點的右子樹不爲空,則右子樹上所有節點的值均大於它根節點的值。
(3)任意節點的左右子樹也分別爲二叉查找樹
沒有鍵值相等的節點,也就是節點唯一。
三、紅黑樹特徵:
` (1)每一個節點不是黑色就是紅色;
(2)根節點總是黑色的;
(3)每一個葉子結點都是黑色的空節點(NIL節點);
(4)如果一個節點是紅色的,那麼它的子節點一定是黑色的,反之不成立;
(5)從根節點到任意一個最底下的子節點,這條路徑中所包含的黑色節點個數必須是相同的,即黑色節點的高度是相同的;
(6)在插入節點時,插入的節點一定是紅色節點。插黑節點一定會衝突,不能保證黑色節點高度一致;但是插入紅色節點,有一半概率會衝突,不能保證紅色節點的子節點是黑色節點。
四、平衡性修正的方法:
` (1)變色
父節點爲黑,兩個子節點爲紅,變色就是將父節點變紅,子節點都變黑。
(2)左旋
(3)右旋
五、紅黑樹的自平衡修正規律:
` (1)如果父節點和叔父節點都是紅色,則將父節點以及叔父節點塗黑,將祖父節點塗紅;
(2)如果父節點是紅色且叔父節點是黑色,並且當前結點是右子節點,以當前節點爲基準進行左旋;
(3)如果父節點是紅色且叔父節點是黑色,並且當前節點是左子節點,以父節點爲基準進行右旋。
如下例子: