红黑树是一种特定类型的二叉树,它是在计算机科学中用来组织数据比如数字的块的一种结构。
红黑树的英文是“Red-Black Tree”,简称 R-B Tree,它是一种不严格的平衡二叉查找树,左右子树高差有可能大于 1。红黑树中的节点,一类被标记为黑色,一类被标记为红色。
红黑树的特征:
(1)每个节点不是红色就是黑色。
(2)根节点永远是黑色。
(3)每个叶子节点都是null节点,颜色是黑色的。
(4)如果一个节点是红色的,那么他的子节点必须是黑色的。
(5)从一个节点到该节点的所有子孙节点上包含相同的黑色节点。
下图是将一个多叉树转换为红黑树:
可以看出,从根节点5到节点2,包含3个黑色节点;从根节点5到节点8,包含3个黑色节点(包含自身);从根节点5到节点11,包含3个黑色节点。
由此可以看出红黑树中从一个节点到该节点的所有子孙节点上包含相同的黑色节点这一特点。
红黑树的插入:
红黑树为二叉搜索树,我们按照二叉搜索树的方法对其进行节点插入。红黑树有颜色约束性质,因此我们在插入新节点之后要进行颜色调整。
(1)根节点为NULL,直接插入新节点并将其颜色置为黑色。
(2)根节点不为NULL,找到要插入新节点的位置。
(3)插入新节点。
(4)判断新插入节点对全树颜色的影响,更新调整颜色。
红黑树与平衡二叉树AVL的比较:
(1)AVL树的时间复杂度虽然优于红黑树,但是对于现在的计算机,cpu太快,可以忽略性能差异。
(2)红黑树的插入删除比AVL树更便于控制操作。
(3)红黑树整体性能略优于AVL树(红黑树旋转情况少于AVL树)。