一句话概括:着色了的二叉查找树。
二叉树若退化成了一棵具有n个结点的线性链后,则此些操作最坏情况运行时间为O(n)。红黑树通过着色等一些性质使得树相对平衡,使得最终查找、插入、删除的时间复杂度最坏情况下依然为O(lgn)。是一种不太完美的平衡二叉树。
应用场景:STL中的set(unordered_set是hash)、map。
满足的条件:
1.节点是红色或黑色;
2.根节点是黑色;
3.每个叶节点(NIL节点,空节点)是黑色的;
4.每个红色节点的两个子节点都是黑色;(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
查找、插入、删除:
红黑树的删除操作类似于B-树的删除,需要注意保持它的红黑平衡性。红黑的搜索那就和B-树的查找一模一样了,其实任何排序树的操作都是一样的。
插入、删除都十分复杂,最好见:红黑树
保持平衡的重要操作:旋转
平衡二叉树要保持他的平衡性,旋转是一项必不可少的工作。同样,红黑树是一颗准平衡二叉树,旋转也是一项重要工作。
旋转基本都一样,左旋和右旋互为镜像,左右旋啥的就是组合旋,只要记住一幅图即可: