看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《christianSK (AG)》之銘言: : 4 7 12 15 3 5 14 18 : Horowitz裡沒有從empty開始建立的過程 : 而我在一開始的地方遇到了點困難 : 在前三項插入之後 會變成怎麼樣呢? 4 7 12 都變成blcak嗎? : 先謝謝大家~ 請參考超好用Demo: http://gauss.ececs.uc.edu/RedBlack/redblack.html Insert就是「紅叔」和「黑叔」兩種情況 Figure Leaf省略 Insert 4(沒點時第一個點直接塗黑) 4 Insert 7,塗紅 4 \ 7 Insert 12,紅紅相連 檢查過後發現12的叔叔是黑的(葉子),做Rotation後重塗 4 \ 7 \ 127 / \ 4 12 Insert 15,紅紅相連,15有紅叔, 重新塗色(父叔塗黑、爺爺塗紅),向上檢查 檢查到root後直接把root塗黑 7 / \ 4 12 \ 157 / \ 4 12 \ 157 / \ 4 12 \ 15 Insert 3,5 7 / \ 4 12 / \ 3 15 Insert 5 7 / \ 4 12 / \ \ 3 5 15 Insert 14,紅紅相連,14有黑叔(葉子),做兩次Rotation+重塗(中間省略) 7 / \ 4 12 / \ \ 3 5 15 / 147 / \ 4 12 / \ \ 3 5 14 \ 157 / \ 4 14 / \ / \ 3 5 12 15 Insert 18,紅紅相連,18有紅叔,重塗往上觀察 由於14塗紅後不會有紅紅相連,因此做完! 7 / \ 4 14 / \ / \ 3 5 12 15 \ 187 / \ 4 14 / \ / \ 3 5 12 15 \ 18 ---------------------------------------------- 如果考紅黑樹的Deletion,我真的很想分數送給他... 紅兄、黑兄二黑姪、黑兄紅姪的雙黑處理超級世界無敵難記... 如果有心想搞懂請看最上面的Java Demo。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.127.176.48 ※ 編輯: ybite 來自: 122.127.176.48 (02/13 23:42)
christianSK:謝謝!! 02/13 23:44
mqazz1:推用心 deletion的確有夠麻煩= =" 02/13 23:49
BenLinus:推! ^^ 02/13 23:56
cksh3300110:超用心~ 紅黑數刪除ORZ 02/14 00:03
death888:所以是只有黑叔的情況才需要rotation嗎 02/14 18:46
death888:還有INSERT 12那步的重新塗色是怎麼塗的 不太懂囧 02/14 18:47
robert527152:跟alv的rotate一樣,著色為root紅sub黑 02/14 19:11
death888:所以rotation與否跟黑叔沒關係囉 02/14 19:14
death888:那紅叔跟黑叔兩種情況的差別在哪 我看這例子看不太出來 02/14 19:15
BenLinus:有吧, insert時若有 red violation 就看叔叔的顏色來作處 02/14 19:33
BenLinus:理, 若是紅叔, 就recolor; 若是黑叔, 就要rotation才行 02/14 19:34
death888:那recolor的做法是什麼? 還有我看書上說兩個兒子不能為紅 02/14 19:40
death888:否則要做recolor 可是上面的例子並沒有考慮這情況? 02/14 19:41
BenLinus:應該是不能紅紅相接吧 @@ 可以有兩個紅子 02/14 19:43
sneak: 推用心 deletio https://daxiv.com 09/11 14:15