R-B Tree,全程Red-Black Tree,中文译为红黑树。它是一种特殊的二叉查找树,它的每个节点上都有存储位表示节点的颜色,可以是红或者黑。
红黑树应用比较广泛,主要是用来存储有序的数据,它的时间复杂度为O(lgn),效率那是杠杠的高呀。
例如,Java集合中的TreeSet和TreeMap以及Linux虚拟内存的管理,就是通过红黑树来实现的。
红黑树的特点:
(1)每个节点为红或黑两种
(2)根节点为黑色
(3)每个叶子节点是黑色(注:这里的叶子节点,是指为空(NIL或NULL)的叶子节点!)
(4)如果一个节点是红色的,则它的子节点必须为黑色
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点(该特性确保没有一条路径会比其他路径长出俩倍,因而,红黑树是相对比较接近平衡的二叉树。)
示意图如下:
红黑树基本操作:
(1)添加:第一步,将红黑树当做一棵二叉查找树,将节点插入;第二步,将节点着色为红色;第三步,通过旋转和重新着色等方法来修正该树,使之重新成为一棵红黑树
旋转示意图:
(1)左旋转:
(2)右旋转: