红黑树
R-B TREE 红黑树
红黑树,是一种特殊的二叉查找树,红黑树的每个节点都有存储位,表示节点的颜色,红或者黑
红黑树五大特性
- 每个节点不是黑色就是红色
- 根节点一定是黑色
- 每个空的(NIL)叶子节点都是黑色,所谓的叶子节点都是NIL、一般都没有显示出来的节点
- 如果一个节点是红色的,则它的子节点必须是黑色的,红色节点的父节点都是黑色的,从根节点到叶子节点的所有路径上不能有2个连续的红色节点
- 从一个节点到该节点的子孙节点的所有路径上包含相同数量的黑节点
红黑树 对比 2-3-4 B树
- 红黑树和4阶B树具有等价性,4阶B树的节点数为(clie(m)-1<n<m-1)
- BLACK节点与它的RED子节点融合在一起,形成一个B树节点
- 红黑树的BLACK节点个数与4阶B树的节点总个数相等
- 将2-3阶B树与红黑树进行类比是极其不严谨的,2-3树不能完美匹配红黑树的所有情况
红黑树的添加
一种有12种情况
- 红-黑-红
- 黑-红
- 红-黑
- 黑
- 默认添加的节点都是红色节点
- 添加的节点都添加到叶子节点上
- 在进行红黑树操作的时候、完全可以类比4阶B树来进行操作,把红色的节点添加到黑色的节点中,进行操作
- parent is black。父节点是黑色,直接加、不用变
- uncle not is red 叔父节点不是红色,LL、RR
- uncle is red 叔父节点是红色,上溢
红黑树的应用
- 用于存储有序数据,时间复杂度是O(lgn),效率非常高。
- Java集合中的TreeSet和TreeMap都用到红黑树。
- linux虚拟内存管理用的红黑树实现
红黑树的时间复杂度是O(lgn)
定理
- 一个含有n个节点的红黑树的高度至多为2log(n+1)
- 这里不证明了
- 搜索:O(logN)
- 添加:O(logN),O(1) 次的旋转操作
- 删除:O(logN),O(1) 次的旋转操作
红黑树的平衡
- 相比AVL树,红黑树的平衡标准比较宽松,没有一条路径会大于其他路径2倍
- 一种弱平衡,黑高度平衡
- 红黑树的最大高度是2*log2(n+1),O(logN)级别
红黑树基本操作:添加、删除 、左旋、右旋
- 红黑树的添加和删除操作都会用到旋转方法,因为在添加完节点之后,红黑树就发生了变化,可能不满足红黑树的五条特性,这时候就需要通过旋转重新变成红黑树
- 左旋
- 右旋
- 左旋和右旋其实是一个相对的过程,
- 左旋:x的右孩子设为x的父节点,左旋中的左意味着被旋转的节点变成一个左节点
基本操作(二) 添加
- 将红黑树当作一颗二叉查找树,将节点插入
- 将插入的节点着色为红色
- 经过一系列旋转或者着色操作,重新变成一颗红黑树
基本操作(三) 删除
- 将红黑树当作一颗二叉查找树,将节点删除
- 通过旋转着色,重新变成一颗红黑树