红黑树

1.基本概念:

 红黑树,一种二叉查找树,但在每个节点上增加一个存储位表示节点的颜色,红色或者黑色,通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长处两倍,因而接近是平衡的。

2.特性:

(1)红黑树是一颗二叉查找树,执行查找,插入,删除等操作的时间复杂度为O(lgn)

(2)如果一颗具有n个节点的线性链,那么二叉查找树的最坏情况时间O(n),而红黑树能保证在最坏情况下,基本的动态几何操作的时间均为O(lgn)。

红黑树的特点:

 1).每个节点要么是红的,要么是黑的。

 2).根节点时黑的。

 3).每个叶子节点,即空节点(NIL)是黑的。

 4).如果一个节点时红的,那么它的两个儿子都是黑的。

 5).对每个节点,从该节点到其子孙节点的所有路径上包含相同数目的黑节点。

3.树的旋转

前景:当我们对红黑树进行插入和删除等操作时,对树做了修改,可能会违背红黑树的性质,为了保持红黑树的性质,我们可以通过对树进行旋转,即修改树种某些节点的颜色及指针结构,以达到红黑树进行插入,删除等操作,红黑树依然能保持它特有的性质。

3.1 左旋:

  

1).如果x的父节点是空节点,则将y设为根节点;

2).如果x是它父节点的左孩子,则将y设为“x的父节点的左孩子”;

3).如果x是它父节点的右孩子,将y设为“x的父节点的右孩子”;

将x设为y的左孩子,

将x的父节点设为y

3.2右旋

  

对Y进行右旋,意味着“将Y变成一个右节点”

如果“y的父亲”是一个空节点,则将X设为根节点;

如果y是它父节点的右孩子,则将x设为“y的父节点的右孩子”

如果y是它父节点的左孩子,将x设为“y的父节点的左孩子”

将y设为x的右孩子,

将y的父节点设为x

原文参考:http://www.cnblogs.com/v-July-v/archive/2010/12/29/1983707.html

       http://www.cnblogs.com/skywang12345/p/3245399.html

原文地址:https://www.cnblogs.com/Wanted-Tao/p/7647263.html