Skip to content

Commit

Permalink
Update 08.01.md
Browse files Browse the repository at this point in the history
  • Loading branch information
julycoding committed May 2, 2014
1 parent 1d2a84f commit 1c3efcf
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions ebook/zh/08.01.md
Original file line number Diff line number Diff line change
Expand Up @@ -331,15 +331,15 @@ RB-DELETE-FIXUP(T, x) 恢复与保持红黑性质的工作
- b)删除修复情况2:当前节点是黑+黑且是根节点,解法:什么都不做,结束。

但如果是以下情况呢:
- 删除修复情况1:当前节点是黑+黑且兄弟节点为红色(此时父节点和兄弟节点的子节点分为黑)
- 删除修复情况1:当前节点是黑+黑且兄弟节点为红色(此时父节点和兄弟节点的子节点分为黑)
- 删除修复情况2:当前节点是黑加黑且兄弟是黑色且兄弟节点的两个子节点全为黑色
- 删除修复情况3:当前节点颜色是黑+黑,兄弟节点是黑色,兄弟的左子是红色,右子是黑色
- 删除修复情况4:当前节点颜色是黑-黑色,它的兄弟节点是黑色,但是兄弟节点的右子是红色,兄弟节点左子的颜色任意


此时,咱们需要调用RB-DELETE-FIXUP(T, x),来恢复与保持红黑性质的工作。

删除修复情况1:当前节点是黑+黑且兄弟节点为红色(此时父节点和兄弟节点的子节点分为黑)
**删除修复情况1:当前节点是黑+黑且兄弟节点为红色(此时父节点和兄弟节点的子节点分为黑)**
解法:把父节点染成红色,把兄弟结点染成黑色,之后重新进入算法(我们只讨论当前节点是其父节点左孩子时的情况)。此变换后原红黑树性质5不变,而把问题转化为兄弟节点为黑色的情况(注:变化前,原本就未违反性质5,只是为了**把问题转化为兄弟节点为黑色的情况**)。 即如下代码操作:
```
//调用RB-DELETE-FIXUP(T, x) 的1-8行代码
Expand All @@ -360,7 +360,7 @@ RB-DELETE-FIXUP(T, x) 恢复与保持红黑性质的工作

![](../images/rbtree/11.jpg)

删除修复情况2:当前节点是黑加黑且兄弟是黑色且兄弟节点的两个子节点全为黑色。
**删除修复情况2:当前节点是黑加黑且兄弟是黑色且兄弟节点的两个子节点全为黑色。**
解法:把当前节点和兄弟节点中抽取一重黑色追加到父节点上,把父节点当成新的当前节点,重新进入算法。(此变换后性质5不变),即调用RB-INSERT-FIXUP(T, z) 的第9-10行代码操作,如下:
```
//调用RB-DELETE-FIXUP(T, x) 的9-11行代码
Expand All @@ -376,7 +376,7 @@ RB-DELETE-FIXUP(T, x) 恢复与保持红黑性质的工作

![](../images/rbtree/13.jpg)

删除修复情况3:当前节点颜色是黑+黑,兄弟节点是黑色,兄弟的左子是红色,右子是黑色。
**删除修复情况3:当前节点颜色是黑+黑,兄弟节点是黑色,兄弟的左子是红色,右子是黑色。**
解法:把兄弟结点染红,兄弟左子节点染黑,之后再在兄弟节点为支点解右旋,之后重新进入算法。此是把当前的情况转化为情况6,而性质5得以保持,即调用RB-INSERT-FIXUP(T, z) 的第12-16行代码,如下所示:
```
//调用RB-DELETE-FIXUP(T, x) 的第12-16行代码
Expand All @@ -394,7 +394,7 @@ RB-DELETE-FIXUP(T, x) 恢复与保持红黑性质的工作

![](../images/rbtree/15.jpg)

删除修复情况4:当前节点颜色是黑-黑色,它的兄弟节点是黑色,但是兄弟节点的右子是红色,兄弟节点左子的颜色任意。
**删除修复情况4:当前节点颜色是黑-黑色,它的兄弟节点是黑色,但是兄弟节点的右子是红色,兄弟节点左子的颜色任意。**
解法:把兄弟节点染成当前节点父节点的颜色,把当前节点父节点染成黑色,兄弟节点右子染成黑色,之后以当前节点的父节点为支点进行左旋,此时算法结束,红黑树所有性质调整正确,即调用RB-INSERT-FIXUP(T, z)的第17-21行代码,如下所示:
```
//调用RB-DELETE-FIXUP(T, x) 的第17-21行代码
Expand Down

0 comments on commit 1c3efcf

Please sign in to comment.