From b1449276f2f6a50ba572db138d90bd76fed7d33b Mon Sep 17 00:00:00 2001 From: July <786165179@qq.com> Date: Sat, 3 May 2014 22:27:05 +0800 Subject: [PATCH] Update 08.01.md --- ebook/zh/08.01.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ebook/zh/08.01.md b/ebook/zh/08.01.md index 32252e781..7586893f3 100644 --- a/ebook/zh/08.01.md +++ b/ebook/zh/08.01.md @@ -254,7 +254,7 @@ ok,接下来,咱们最后来了解,红黑树的删除操作。 2. 只有一个儿子。那么把父结点的相应儿子指针指向儿子的独生子,删除儿子结点也OK了。 3. 有两个儿子。这是最麻烦的情况,因为你删除节点之后,还要保证满足搜索二叉树的结构。其实也比较容易,我们可以选择左儿子中的最大元素或者右儿子中的最小元素放到待删除节点的位置,就可以保证结构的不变。当然,你要记得调整子树,毕竟又出现了节点删除。习惯上大家选择左儿子中的最大元素,其实选择右儿子的最小元素也一样,没有任何差别,只是人们习惯从左向右。这里咱们也选择左儿子的最大元素,将它放到待删结点的位置。左儿子的最大元素其实很好找,只要顺着左儿子不断的去搜索右子树就可以了,直到找到一个没有右子树的结点。那就是最大的了。 -二叉查找树的插入代码如下所示: +二叉查找树的删除代码如下所示: ``` TREE-DELETE(T, z) 1 if left[z] = NIL or right[z] = NIL @@ -276,7 +276,8 @@ TREE-DELETE(T, z) 17 return y ``` -OK,回到红黑树上来,红黑树结点删除的算法实现是: +OK,回到红黑树上来,红黑树结点删除的算法实现是: + RB-DELETE(T, z) 单纯删除结点的总操作 ``` 1 if left[z] = nil[T] or right[z] = nil[T]