红黑树(二叉搜索树的一种)
2015-04-11 21:11
183 查看
满足如下性质:
每个结点或是红色的,或是黑色的
根结点是黑色的
每个叶节点(NIL)都是黑色的
如果一个结点是红色的,则其两个子结点都是黑色的
对每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点
——>确保没有一条路径会比其他路径长出两倍,是近似于平衡的
一棵有n个内部结点的红黑树的高度至多为2 lg(n+1)
树操作TREE-INSERT和TREE-DELETE会对树做了修改,为了维持这些性质,必须要改变树中某些结点的颜色以及指针结构
修改指针结构通常通过旋转(左旋和右旋)来完成
LEFT-ROTATE(T, x)【涉及到x, y】
y = x.right
x.right = y.left
if y.left != T.nil //如果y的左孩子不是空的,则它变为x的右孩子后,需要修改它的父亲结点
y.left.p = x
y.p = x.p
if x.p == T.nil //如果一开始x是根结点
T.root = y
elseif x == x.p.left //修改x的父亲结点的后继
x.p.left = y
else
x.p.right = y
y.left = x
x.p = y
插入
1. 同二叉搜索树的插入一样,找到插入的位置,但是可能破坏红黑树的性质,因此需要调整回来
2. 调整恢复红黑树的性质,称插入的结点为z
1) z的叔结点y是红色的,则将z结点的父结点和叔结点都改成黑色;并将z上升至z的父结点的父结点
2) z的叔结点y是黑色的且z是一个右孩子,先做一次左旋转,将z转换为左孩子,从而进入第3)种情况
3) z的叔结点y是红色的且z是一个左孩子,做一次右旋转
总的时间复杂度为O(lg n)
删除比插入复杂一点,这里就不多讲了
每个结点或是红色的,或是黑色的
根结点是黑色的
每个叶节点(NIL)都是黑色的
如果一个结点是红色的,则其两个子结点都是黑色的
对每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点
——>确保没有一条路径会比其他路径长出两倍,是近似于平衡的
一棵有n个内部结点的红黑树的高度至多为2 lg(n+1)
树操作TREE-INSERT和TREE-DELETE会对树做了修改,为了维持这些性质,必须要改变树中某些结点的颜色以及指针结构
修改指针结构通常通过旋转(左旋和右旋)来完成
LEFT-ROTATE(T, x)【涉及到x, y】
y = x.right
x.right = y.left
if y.left != T.nil //如果y的左孩子不是空的,则它变为x的右孩子后,需要修改它的父亲结点
y.left.p = x
y.p = x.p
if x.p == T.nil //如果一开始x是根结点
T.root = y
elseif x == x.p.left //修改x的父亲结点的后继
x.p.left = y
else
x.p.right = y
y.left = x
x.p = y
插入
1. 同二叉搜索树的插入一样,找到插入的位置,但是可能破坏红黑树的性质,因此需要调整回来
2. 调整恢复红黑树的性质,称插入的结点为z
1) z的叔结点y是红色的,则将z结点的父结点和叔结点都改成黑色;并将z上升至z的父结点的父结点
2) z的叔结点y是黑色的且z是一个右孩子,先做一次左旋转,将z转换为左孩子,从而进入第3)种情况
3) z的叔结点y是红色的且z是一个左孩子,做一次右旋转
总的时间复杂度为O(lg n)
删除比插入复杂一点,这里就不多讲了
相关文章推荐
- 一种新的删除红黑树节点的算法
- 二叉搜索树和红黑树概述以及模板实现(1)
- 关于树的总结从二叉树->二叉搜索树->平衡二叉树->红黑树->B树与B+树
- 二叉搜索树的一种构造方法
- 二叉搜索树之红黑树
- 二叉搜索树—RBTree(红黑树)
- 二叉搜索树和红黑树概述以及模板实现(2)--红黑树
- 树——(1)综述:二叉树,线索二叉树,二叉搜索树,B-/B+树,AVL树,红黑树
- PAT 1135. Is It A Red-Black Tree (30) 二叉搜索树建立 + 红黑树判断
- 一种二叉搜索树实现
- 数据结构-树(多叉树、二叉树、二叉搜索树、平衡二叉树、字典树、红黑树、线段树)
- 二叉搜索树,AVL,红黑树,B树,哈希表,位图的比较
- B-Tree 漫谈 (从二叉树到二叉搜索树到平衡树到红黑树到B树到B+树到B*树)
- 二叉搜索树—RBTree(红黑树)
- PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
- 二叉搜索树、AVL树、B-树、B+树、B*树、红黑树
- 红黑树实现(二叉搜索树)
- STL源码剖析之树 tree 二叉搜索树 红黑树【2013.12.04】
- RedBlackTree(红黑树)--一种自平衡(最优)的二叉搜索树算法
- 一种新的删除红黑树节点的算法