紅黑樹

搜索部分非平衡樹的時(shí)間介于O(N)和O(logN)之間,取決樹的不平衡程度,平衡樹O(logN)

紅黑樹規(guī)則
1.每個(gè)節(jié)點(diǎn)不是紅色就是黑色的
2.根總是黑色
3.每個(gè)葉結(jié)點(diǎn)(葉結(jié)點(diǎn)即指樹尾端NIL指針或NULL結(jié)點(diǎn))都是黑的
4.如果一個(gè)結(jié)點(diǎn)是紅的,那么它的兩個(gè)兒子都是黑的
5.對(duì)于任意結(jié)點(diǎn)而言,其到葉結(jié)點(diǎn)樹尾端NIL指針的每條路徑都包含相同數(shù)目的黑結(jié)點(diǎn)

樹的選擇
左旋

Paste_Image.png

當(dāng)在某個(gè)結(jié)點(diǎn)pivot上,做左旋操作時(shí),左旋以pivot到Y(jié)之間的鏈為“支軸”進(jìn)行,它使Y成為該子樹的新根,而Y的左孩子b則成為pivot的右孩子

右旋

Paste_Image.png

紅黑樹的插入和插入修復(fù)
1.如果插入的是根結(jié)點(diǎn),由于原樹是空樹,此情況只會(huì)違反性質(zhì)2,因此直接把此結(jié)點(diǎn)涂為黑色
2.如果插入的結(jié)點(diǎn)的父結(jié)點(diǎn)是黑色,由于此不會(huì)違反性質(zhì)2和性質(zhì)4,紅黑樹沒有被破壞,所以此時(shí)什么也不做。
3.當(dāng)前結(jié)點(diǎn)的父結(jié)點(diǎn)是紅色,祖父結(jié)點(diǎn)的另一個(gè)子結(jié)點(diǎn)(叔叔結(jié)點(diǎn))是紅色:將當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)和叔叔節(jié)點(diǎn)涂黑,祖父結(jié)點(diǎn)涂紅,把當(dāng)前結(jié)點(diǎn)指向祖父節(jié)點(diǎn),從新的當(dāng)前節(jié)點(diǎn)重新開始算法
4.當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)是紅色,叔叔節(jié)點(diǎn)是黑色,當(dāng)前節(jié)點(diǎn)是其父節(jié)點(diǎn)的右子(插入節(jié)點(diǎn)N是其父節(jié)點(diǎn)P的右孩子,而父節(jié)點(diǎn)P又是其父節(jié)點(diǎn)的左孩子):當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)做為新的當(dāng)前節(jié)點(diǎn),以新當(dāng)前節(jié)點(diǎn)為支點(diǎn)左旋
5.當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)是紅色,叔叔節(jié)點(diǎn)是黑色,當(dāng)前節(jié)點(diǎn)是其父節(jié)點(diǎn)的左孩子(要插入的節(jié)點(diǎn)N 是其父節(jié)點(diǎn)的左孩子,而父節(jié)點(diǎn)P又是其父G的左孩子):父節(jié)點(diǎn)變?yōu)楹谏?,祖父?jié)點(diǎn)變?yōu)榧t色,在祖父節(jié)點(diǎn)為支點(diǎn)右旋

紅黑樹的刪除和刪除修復(fù)
1.根結(jié)點(diǎn)
2.當(dāng)前節(jié)點(diǎn)是黑且兄弟節(jié)點(diǎn)為紅色(此時(shí)父節(jié)點(diǎn)和兄弟節(jié)點(diǎn)的子節(jié)點(diǎn)分為黑):把父節(jié)點(diǎn)染成紅色,把兄弟結(jié)點(diǎn)染成黑色,父節(jié)點(diǎn)為支點(diǎn)左旋,之后重新進(jìn)入算法(我們只討論當(dāng)前節(jié)點(diǎn)是其父節(jié)點(diǎn)左孩子時(shí)的情況)
3.當(dāng)前節(jié)點(diǎn)是黑且兄弟是黑色且兄弟節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn)全為黑色:把當(dāng)前節(jié)點(diǎn)和兄弟節(jié)點(diǎn)中抽取一重黑色追加到父節(jié)點(diǎn)上,把父節(jié)點(diǎn)當(dāng)成新的當(dāng)前節(jié)點(diǎn),重新進(jìn)入算法
4.當(dāng)前節(jié)點(diǎn)顏色是黑,兄弟節(jié)點(diǎn)是黑色,兄弟的左子是紅色,右子是黑色:把兄弟結(jié)點(diǎn)染紅,兄弟左子節(jié)點(diǎn)染黑,之后再在兄弟節(jié)點(diǎn)為支點(diǎn)解右旋,之后重新進(jìn)入算法
5.當(dāng)前節(jié)點(diǎn)顏色是黑,它的兄弟節(jié)點(diǎn)是黑色,但是兄弟節(jié)點(diǎn)的右子是紅色,兄弟節(jié)點(diǎn)左子的顏色任意:把兄弟節(jié)點(diǎn)染成當(dāng)前節(jié)點(diǎn)父節(jié)點(diǎn)的顏色,把當(dāng)前節(jié)點(diǎn)父節(jié)點(diǎn)染成黑色,兄弟節(jié)點(diǎn)右子染成黑色,之后以當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)為支點(diǎn)進(jìn)行左旋

鏈接:
http://blog.csdn.net/chenhuajie123/article/details/11951777

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、紅黑樹介紹 紅黑樹又稱R-B Tree,全稱是Red-Black Tree,它是一種特殊的二叉查找樹,紅黑樹的...
    文哥的學(xué)習(xí)日記閱讀 10,150評(píng)論 1 35
  • 原文鏈接 二叉查找樹 由于紅黑樹本質(zhì)上就是一棵二叉查找樹,所以在了解紅黑樹之前,咱們先來看下二叉查找樹。 二叉查找...
    非典型程序員閱讀 2,941評(píng)論 2 5
  • 數(shù)據(jù)結(jié)構(gòu)與算法--從平衡二叉樹(AVL)到紅黑樹 上節(jié)學(xué)習(xí)了二叉查找樹。算法的性能取決于樹的形狀,而樹的形狀取決于...
    sunhaiyu閱讀 7,815評(píng)論 4 32
  • 一. 算法之變,結(jié)構(gòu)為宗 計(jì)算機(jī)在很多情況下被應(yīng)用于檢索數(shù)據(jù),比如航空和鐵路運(yùn)輸業(yè)的航班信息和列車時(shí)刻表的查詢,都...
    Leesper閱讀 7,401評(píng)論 13 42
  • 紅黑樹的本質(zhì)就是一棵二叉查找樹,所以先從二叉查找樹來了解起。 二叉查找樹 二叉查找樹又稱有序二叉樹,具有以下特性:...
    xx1994閱讀 1,606評(píng)論 1 6

友情鏈接更多精彩內(nèi)容