概述
紅黑樹(英語:Red–black tree)是一種自平衡二叉查找樹,是在計算機科學中用到的一種數據結構,典型的用途是實現關聯數組。它是在1972年由魯道夫•貝爾發明的,他稱之爲"對稱二叉B樹",它現代的名字是在Leo J. Guibas和Robert Sedgewick於1978年寫的一篇論文中得到的。數組
五個性質
紅黑樹的五個性質:數據結構
- 每一個結點或是紅色的,或是黑色的。
- 根結點是黑色的。
- 每一個葉結點(NIL)是黑色的。
- 若是一個結點是紅色的,則它的兩個子結點都是黑色的。
- 對每一個結點,從該結點到其全部葉子結點的簡單路徑上,均包含相同數目的黑色結點。
插入
按照BST的規則增長結點並標記它爲紅色,爲何是紅色呢?緣由以下:ui
- 若設置爲黑色,就會致使根到葉子的路徑上有一條路徑上多了一個黑色結點,很難調整(性質5)。
- 設置爲紅色結點後,可能會致使出現兩個連續紅色結點的衝突,那麼能夠經過顏色調換和數旋轉來調整(性質4)。
1.新結點位於樹根
新節點位於樹根,直接變爲黑色便可。blog
2.新結點的父結點爲黑色(黑父)
該條件下,插入一個紅色結點不會影響紅黑樹的平衡。計算機科學
- 新增結點爲紅色的,任何一條簡單路徑都沒有增長黑色結點的個數。
- 該種狀況較爲常見,從而使得紅黑樹須要旋轉調整的概率相對AVL樹少一些。
3.新結點的父結點爲紅色(紅父)
新結點的父結點是紅色,祖父結點必定是黑色,須要根據叔叔結點來決定進行什麼樣的操做。im
叔叔結點也是紅色
- 祖父結點變爲紅色。
- 父結點變爲黑色。
- 叔叔結點變爲紅色。
叔叔結點爲黑色或者沒有叔叔
情形1:新結點N爲父結點P的右孩子,而P是其父結點的左孩子
- 進行先左再右旋轉。
- 新結點變爲黑色,祖父結點變爲紅色。
情形2:新結點N是父結點的左孩子,P是父結點的右孩子
- 進行先右再左旋轉。
- 新結點變爲黑色,祖父結點變爲紅色。
情形3:新結點N和父結點P都是左孩子
情形4:新結點N和父結點P都是右孩子
- 先進行左旋轉。
- 父結點變爲黑色,祖父結點變爲紅色。
以上四種旋轉結束後,根均爲黑色,不須要向上繼續進行平衡操做。數據