13 Red-black Trees

13 Red-black Trees?

Red-black trees are one of many search-tree schemes that are "balanced" in order to guarantee that basic dynamic-set operations take O(lgn) time in the worst case.

Red-black trees?是许多搜索树框架中得一个。这些树为了保证基本的动态集合在最坏情况下操作时间在0(lgn ),采取了自平衡。

?

?

A red-black tree is a binary tree that satisfies the following red-black properties:

1. Every node is either red or black.?

2. The root is black.?

3. Every leaf (NIL) is black.?

4. If a node is red, then both its children are black.?

5. For each node, all simple paths from the node to descendant leaves contain the same number of black nodes.?

1?所有的节点非红即黑

2?根是黑的

3?叶子(Nil)也是黑得

4?一个节点是红得,孩子必定是黑的。

5?对于每个节点,从这个节点到叶子的任意路径包含同样数量的黑的。

?

red-black tree?的属性从2-5感觉都是针对黑色的限制。

?

an example of a red-black tree.

?

As a matter of convenience in dealing with boundary conditions in red-black

tree code, we use a single sentinel to represent NIL

All pointers to NIL are replaced by pointers to the sentinel T.nil

所有指向空的都被替换成指向哨兵?T.nil?了

?

?

In the remainder of this chapter, we omit the leaves when we draw red-black trees, as shown

?

We call the number of black nodes on any simple path from, but not including, a node x down to a leaf the black-height of the node, denoted bh(x)?

?

13.2 Rotations?

We change the pointer structure through rotation, which is a local operation in a search tree that preserves the binary-search-tree property.

我们通过rotation来改变指针结构。它是保留搜索树属性的一个本地操作。

?

?

13.3 Insertion?

We can insert a node into an n-node red-black tree in O(lgn) time.

To do so, we use a slightly modified version of the TREE-INSERT procedure (Section 12.3) to insert node ? into the tree T as if it were an ordinary binary search tree, and then we color z red.

?

?

?

Case1:

?

Case 2 and case 3

?

?

13.4 Deletion?

Like the other basic operations on an n-node red-black tree, deletion of a node takes time O(lgn ). Deleting a node from a red-black tree? is a bit more complicated than inserting a node .?

First ,we need to customize the TRANSPLANT subroutine? that Tree-Delete calls so that it applies to a red-black tree :

?

?

?

?

?

?

?

Here is the red-black delete tree program? :

?

?

Finally, if node y was black, we might have introduced one or more violations of the red-black properties, and so we call RB-DELETE-FIXUP in line 22 to restore the red-black properties. If y was red, the red-black properties still hold when y is removed or moved, for the following reasons:

如果节点y是黑色的,我们可能引入一个或多个违反红黑树性质。如果y是红色的,则红黑树的性质能得到保证。原因如下:

1. No black-heights in the tree have changed.?

黑色深度没有变化

2. No red nodes have been made adjacent. Because y takes z‘s place in the tree, along with z‘s color, we cannot have two adjacent red nodes at y‘s new position in the tree. In addition, if y was not ?‘s right child, then y‘s original right child x replaces y in the tree. If y is red, then x must be black, and so replacing y by x cannot cause two red nodes to become adjacent.?

没有红色节点相邻。因为y取代了z得位置,并且取得了z得颜色,z原来是具有红黑树属性的,所以替换了以后仍然有。

另外,如果y不是z的右孩子,则y的原来位置被x取代了。如果y是红色的话,那么x肯定是黑色的,所以被x取代y?不可能导致两个红色节点相邻。

?

3. Since y could not have been the root if it was red, the root remains black.?

如果y是红色的话,y肯定不是根,因此根仍然保持黑色。

?

?

If node y was black, three problems may arise, which the call of RB-DELETE- FIXUP will remedy.?

First, if y had been the root and a red child of y becomes the new root, we have violated property 2.?

首先如果y是根,并且y的一个红孩子成为了新根,那么违反 根是黑色的 属性。

?

Second, if both x and x.p are red, then we have violated property 4.?

如果x和x.p?是红色的,那么我们可能违反 红色节点不能相邻这一条。

?

Third, moving y within the tree causes any simple path that previously contained y to have one fewer black node. Thus, property 5 is now violated by any ancestor of y in the tree.?

第三,如果移动y,那么任意一条原先包含y的路线可能比其他的路线少一条黑色,因此,从任意一节点到叶子的黑色节点数是相同的。

?

We can correct the violation of property 5 by saying that node x, now occupying y‘s original position, has an "extra" black.?

我们可以纠正 第五条属性 通过将现在占据y的原来位置的x的属性 有一个额外的黑色。

?

That is, if we add 1 to the count of black nodes on any simple path that contains x, then under this interpretation, property 5 holds.?

也就是说,在我们计算从任意一条包括x节点的简单路径的时候,多增加1就能保持 属性5?。

When we remove or move the black node y, we "push" its blackness onto node x.

当我们移动黑色节点y时,我们将她的黑色推到节点x上。

?

?The problem is that now node x is neither red nor black, thereby violating property 1.?

现在问题是现在的节点x既不是黑色也不是红色,违反了属性1.

?

Instead,node x is either "doubly black" or "red-and-black," and it contributes either 2 or 1, respectively, to the count of black nodes on simple paths containing x.

节点x是双黑,或红黑,在计算包含x的简单路径上它将分别贡献一个或两个。

?The color attribute of x will still be either RED (if x is red-and-black) or BLACK (if x is doubly black).?

x的属相将仍然是红色(如果x是红黑)或黑色(如果x是双黑)。

In other words, the extra black on a node is reflected in x‘s pointing to the node rather than in the color attribute.

换句话说,一个节点的额外的黑色反应了x得位置而非颜色属性。

?

?

Case1: x‘sibling w is red?

通过转化,转换成Case2,3,4?的任意一种

Case2?:x‘s sibling w is black ,and both of w‘s children are black?

即x的兄弟,还有兄弟的孩子都是黑色,则让x的兄弟便红,x转移到x得父节点

Case3:x的兄弟是黑色,兄弟的右孩子是红色。则通过转换,转换成Case4

Case4:x的兄弟是黑色,兄弟的左孩子是红色。这个就可以解决黑色节点的问题。

?

?

?

?

时间: 2024-10-03 21:54:31

13 Red-black Trees的相关文章

python 各模块

01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支持模块 12 _ _builtin_ _ 模块 121 使用元组或字典中的参数调用函数 1211 Example 1-1 使用 apply 函数 1212 Example 1-2 使用 apply 函数传递关键字参数 1213 Example 1-3 使用 apply 函数调用基类的构造函数 122

转:Python标准库(非常经典的各种模块介绍)

Python Standard Library 翻译: Python 江湖群 10/06/07 20:10:08 编译 0.1. 关于本书 0.2. 代码约定 0.3. 关于例子 0.4. 如何联系我们 核心模块 1.1. 介绍 1.2. _ _builtin_ _ 模块 1.3. exceptions 模块 1.4. os 模块 1.5. os.path 模块 1.6. stat 模块 1.7. string 模块 1.8. re 模块 1.9. math 模块 1.10. cmath 模块

斯坦福CS课程列表

http://exploredegrees.stanford.edu/coursedescriptions/cs/ CS 101. Introduction to Computing Principles. 3-5 Units. Introduces the essential ideas of computing: data representation, algorithms, programming "code", computer hardware, networking, s

常量类型

三种定义常量的方法 1 #include <stdio.h> 2 3 //1. 预编译 4 #define PI 3.14 5 6 int main(void) 7 { 8 //2. const关键字 9 const int LENGTH = 100; 10 11 //3. 枚举类型 12 enum color { 13 RED, 14 GREEN, 15 BLUE 16 }; 17 printf("pi = %f\n", PI); 18 printf("leng

【转】const和static readonly

我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等.在多数情况下可以混用.二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值.而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值.明白了这个本质区别,我们就不难看出下面的语句中static readonly和const能否互换了: 1. static readonly MyClass myins = new M

Configuration Manager 2012 R2系统需求

当在企业部署System Center 2012 R2 Configuration Manager时,需要考虑硬件.软件等信息确保当部署完成之后能够正常工作. 1. 硬件信息: 当部署System Center 2012 R2 Configuration Manager时,请确保一下硬件信息满足. l CPU: AMD Opteron, AMD Athlon 64, Intel Xeon with Intel EM64T support, Intel Pentium IV with EM64T

Programmer Competency Matrix

Note that the knowledge for each level is cumulative; being atlevel n implies that you also know everything from thelevels lower than n. Computer Science   2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level 3) Comments data structures        Doesn’t

1027. Colors in Mars

People in Mars represent the colors in their computers in a similar way as the Earth people. That is, a color is represented by a 6-digit number, where the first 2 digits are for Red, the middle 2 digits for Green, and the last 2 digits for Blue. The

linux init-&gt;upstart-&gt;systemd

http://en.wikipedia.org/wiki/Init init From Wikipedia, the free encyclopedia This article is about the Unix process. For the pre-Mac OS X extension mechanism, see Extension (Mac OS). Version 7 Unix: /etc listing, showing init and rc Version 7 Unix: c

极客大讲堂:手把手教你用树莓派控制红绿灯

涉及硬件:树莓派以及相关套件.LED红绿灯 涉及知识:电路实验板.CanaKit 当准备好以上,我们就可以开始啦.使用树莓派进行LED原型控制. 首先要明白的是,接入所有的电线.电阻器以及工具包附带的指示灯需要谨慎操作,毕竟如果你设置操作不当将有可能损坏你的硬件. 为了简化与树莓派和LED的接触,也为了方便编写控制代码,我决定编写一个叫做Pi交通灯的小玩意,这是用树莓派控制LED的第一步. 有了这个“红绿灯”之后,你要做的就只是把这个小装置直接插到树莓派的GPIO接口上.你不需要担心连接到线路板