rbtree-remedydoubleblack.html
来自「经典的数据结构源代码(java 实现)」· HTML 代码 · 共 57 行
HTML
57 行
<html><head><title>Code Fragment</title></head><body text=#000000><center></center><br><br><dl><dd><pre> <font color=#8000a0><font color=#8000a0>public</font> </font>Entry<K,V> <font color=#0000ff>remove</font>(Entry<K,V> ent) <font color=#8000a0><font color=#ff8000>throws</font> </font>InvalidEntryException { Entry<K,V> toReturn = <font color=#ff8000>super</font>.<font color=#0000ff>remove</font>(ent); Position<Entry<K,V>> posR = actionPos; <font color=#ff8000>if</font><font color=#0000ff> </font>(toReturn != null) { <font color=#ff8000>if</font><font color=#0000ff> </font>(<font color=#0000ff>wasParentRed</font>(posR) || <font color=#0000ff>isRoot</font>(posR) || <font color=#0000ff>isPosRed</font>(posR)) <font color=#0000ff>setBlack</font>(posR); <font color=#ff8000>else</font> <font color=#0000ff>remedyDoubleBlack</font>(posR); } <font color=#8000a0><font color=#ff8000>return</font> </font>toReturn; } <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>void</font> <font color=#0000ff>remedyDoubleBlack</font>(Position<Entry<K,V>> posR) { Position<Entry<K,V>> posX, posY, posZ; <font color=#8000a0><font color=#8000a0>boolean</font> </font>oldColor; posX = <font color=#0000ff>parent</font>(posR); posY = <font color=#0000ff>sibling</font>(posR); <font color=#ff8000>if</font><font color=#0000ff> </font>(!<font color=#0000ff>isPosRed</font>(posY)) { posZ = <font color=#0000ff>redChild</font>(posY); <font color=#ff8000>if</font><font color=#0000ff> </font>(<font color=#0000ff>hasRedChild</font>(posY)) { <font color=#ff0080>// Case 1: trinode restructuring</font> oldColor = <font color=#0000ff>isPosRed</font>(posX); posZ = <font color=#0000ff>restructure</font>(posZ); <font color=#0000ff>setColor</font>(posZ, oldColor); <font color=#0000ff>setBlack</font>(posR); <font color=#0000ff>setBlack</font>(<font color=#0000ff>left</font>(posZ)); <font color=#0000ff>setBlack</font>(<font color=#0000ff>right</font>(posZ)); <font color=#ff8000>return</font>; } <font color=#0000ff>setBlack</font>(posR); <font color=#0000ff>setRed</font>(posY); <font color=#ff8000>if</font><font color=#0000ff> </font>(!<font color=#0000ff>isPosRed</font>(posX)) { <font color=#ff0080>// Case 2: recoloring</font> <font color=#ff8000>if</font><font color=#0000ff> </font>(!<font color=#0000ff>isRoot</font>(posX)) <font color=#0000ff>remedyDoubleBlack</font>(posX); <font color=#ff8000>return</font>; } <font color=#0000ff>setBlack</font>(posX); <font color=#ff8000>return</font>; } <font color=#ff0080>// Case 3: adjustment</font> <font color=#ff8000>if</font><font color=#0000ff> </font>(posY == <font color=#0000ff>right</font>(posX)) posZ = <font color=#0000ff>right</font>(posY); <font color=#8000a0><font color=#ff8000>else</font> </font>posZ = <font color=#0000ff>left</font>(posY); <font color=#0000ff>restructure</font>(posZ); <font color=#0000ff>setBlack</font>(posY); <font color=#0000ff>setRed</font>(posX); <font color=#0000ff>remedyDoubleBlack</font>(posR); }</dl></body></html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?