作者jenny2921 (耶)
看板b98902HW
標題[資演] 紅黑樹 deletion
時間Thu Jan 13 21:53:16 2011
deletion真是ㄐㄅ的要命 我終於弄懂了...以下為我整理的
希望能救到大家 (快稱讚我人很好,這我可是弄很久的耶!無私的分享給大家啊!!XDD)
我真的弄了很久Q_______________Q
=========
一些簡寫註記(怕大家看不懂)
1.r = red, 紅色
2.b = black, 黑色
3.bh = blackhight
4.n.c = n的child
5.n.p = n的parent
6.bx = 老師投影片上的x, 加上b代表黑色的
7.b1,b2,... = 點1(black),點2(black)...
8.r1,r2,... = 點1(red),點2(red)...
9.w1 = 點1(white:不限定為紅或黑)
9.stuvwy = 不重要的子樹們
10.(1,w1,2) = w1左邊的黑值=1,w1右邊黑值=2
=========
delete(n):
1.沒有手/沒有child/degree=0/是leaf => 直接拿掉n
(1)n=r: color-OK, bh-OK
(2)n=b: adjust(n.p.nil)
2.有一隻手/degree=1 => 把n.child接到n.parent
(1)n=r: color-OK, bh-OK
(2)n=b: adjust(n.c)
3.有兩隻手 => 取左手最大(或右手最小)的點y來補, y變成n的顏色
(1)y=r: color-OK, bh-OK
(2)y=b: adjust(y.c) <y沒有手:y.c=nil / y有左手(右手):即為y.c>
=========
adjust(bx): [bx: x現在是b但x處還缺一個b / x處有2個b ]
1.bx=r: bx直接由r變b,return
2.bx=root: return
3-1.紅弟弟(爸爸必為黑):弟弟轉到爸爸位置,爸爸由黑變紅,弟弟紅變黑,繼續adjust(bx)
b1 b2
/ \ / \
bx r2 r1 v
/ \ / \ / \
s t u v bx u
/ \
s t
<uv值2黑,bx值1黑,st值0黑>
(1,b1,2) => (1,r1,2) => 繼續處理bx
3-2.黑弟弟+2個黑姪子/nil(爸爸顏色不定):弟弟由黑變紅,往上:adjust(w1)
w1 w1
/ \ / \
bx b2 bx r2
/ \ / \ / \ / \
s t b3 b4 s t b3 b4
/ \ / \ / \ / \
u v w y u v w y
<bx值1黑;stuvwy值0黑>
(1,w1,2) => (1,w1,1),但w1以下全部少1黑 => 往上處理w1
3-3.黑弟弟+與弟弟同一邊的姪子黑+另一邊姪子紅:黑弟弟轉向黑姪子,弟弟黑變紅,紅姪
子紅變黑,繼續adjust(bx)
w1 w1
/ \ / \
bx b2 bx b3
/ \ / \ / \ / \
s t r3 b4 s t u r2
/ \ / \ / \
u v w y v b4
/ \
w y
<bx,u,v值1黑;stwy值0黑>
(1,w1,2) => (1,w1,2) => 繼續處理bx
3-4.黑弟弟+與弟弟同一邊的姪子紅+另一邊不重要:爸爸往你的方向轉下來,紅爸爸變黑,
紅姪子變爸爸原本的顏色,黑弟弟變紅
w1 w3
/ \ / \
bx b3 b1 b2
/ \ / \ / \ / \
s t u r2 bx u v w
/ \ / \
v w s t
<bx,u,v,w值1黑;st值0黑>
(1,w1,2) => (1,b1,1),(2,w3,2) => 終於adjust完了!!Q____Q
=============
範例:
http://web.ncyu.edu.tw/~wangch/course/991/al/noterb2.pdf
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.143
→ jenny2921:如果推文超過10,我就把我所有紅黑樹的整裡都貼上來!!! 01/13 21:57
推 rod13824:先推一下 01/13 22:05
→ LesMiserable:可以用這個網頁的applet試著加node減node,看怎麼變化 01/13 22:10
推 andy74139:整理好多噢!!推推!! 01/13 22:10
→ LesMiserable:不過還是要推一下,Jennya超認真! (大拇指) 01/13 22:10
推 peteranny:雖然是單班 但推jennya人超好!!XDD 01/13 22:23
推 ilovejun:推囉XD 01/13 22:35
推 mikein125:人真好XDD 01/13 22:36
推 rock1246:謝謝! 01/13 22:43
→ k1923456:雖然我是單班得可以我還想看~~推一下 01/13 22:46
推 s864372002:布魯斯推推~ 01/13 23:10