紅黑樹的定義
任何一個節(jié)點(diǎn)非紅即黑嫌吠;
樹的根為黑色;
葉子節(jié)點(diǎn)為黑色(注意:紅黑樹的所有葉子節(jié)點(diǎn)都指的是Nil節(jié)點(diǎn))掺炭;
任何兩個父子節(jié)點(diǎn)不可能同時為紅色辫诅;
任何節(jié)點(diǎn)到其所有分枝葉子的簡單路徑上的黑節(jié)點(diǎn)個數(shù)相同;
插入
插入的是紅色(因?yàn)榧t黑樹的性質(zhì)中有一條涧狮,根節(jié)點(diǎn)到任意葉子節(jié)點(diǎn)的黑色節(jié)點(diǎn)相同炕矮,插入紅色降低調(diào)整概率)
①當(dāng)父節(jié)點(diǎn)是黑色,沒有問題者冤,直接插入肤视,不會破壞平衡。
②當(dāng)父節(jié)點(diǎn)是紅色涉枫,且叔父同色(父節(jié)點(diǎn)和叔叔節(jié)點(diǎn)顏色相同)邢滑,此時只需要變色
變色規(guī)則:把父和叔同時變成黑色,祖父變成紅色愿汰,然后再把祖父當(dāng)做當(dāng)前節(jié)點(diǎn)困后,繼續(xù)向上判斷顏色,知道平衡
③當(dāng)父節(jié)點(diǎn)是紅色衬廷,且叔父不同色摇予,這種情況需要旋轉(zhuǎn)加變色處理
一次旋轉(zhuǎn)的情況:左左(右旋),右右(左旋)
什么意思呢吗跋?即新節(jié)點(diǎn)在父節(jié)點(diǎn)的左邊侧戴,父節(jié)點(diǎn)也在祖父節(jié)點(diǎn)的左邊,此時跌宛,只需以父節(jié)點(diǎn)為軸酗宋,一次右旋轉(zhuǎn)即可。然后根據(jù)第②點(diǎn)秩冈,修正顏色即可
右右的情況剛好相反本缠,不用贅述
兩次旋轉(zhuǎn)的情況:右左(先左旋轉(zhuǎn),再右旋轉(zhuǎn))入问,左右(先右旋轉(zhuǎn)丹锹,再左旋轉(zhuǎn))
即插入的新節(jié)點(diǎn)是父親的右節(jié)點(diǎn),而父親是祖父的左節(jié)點(diǎn)芬失,此時楣黍,先以父節(jié)點(diǎn)為軸,左旋轉(zhuǎn)棱烂,左旋之后租漂,情況變成了左左,此時,再以父節(jié)點(diǎn)為軸哩治,進(jìn)行一次右旋秃踩,然后根據(jù)第②點(diǎn)改變顏色即可達(dá)到平衡
左右情況和右左情況相反,操作也正好對稱业筏,不再贅述
可以根據(jù)上述的規(guī)則憔杨,隨意插入一組數(shù)據(jù),來驗(yàn)證是否正確蒜胖,紅黑樹生成網(wǎng)址https://www.cs.usfca.edu/~galles/visualization/RedBlack.html