红黑树是一种自平衡的二叉树,也是二叉查找树。
红黑树和AVL树类似,都是在进行插入和删除操作的时候进行特定的操作以保证二叉查找树的平衡
非空红黑树满足下面的性质:
1.节点是红色或黑色。
2.根节点是黑色。
3.每个叶子节点都是黑色的空节点(NIL节点)。
4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
红黑树的操作
在红黑树上只读操作不需要对用于二叉查找树的操作做出修改,因为它也是二叉查找树。但是,在插入和删除之后,红黑属性可能变得违规。恢复红黑属性需要少量(O(log n))的颜色变更(这在实践中是非常快速的)并且不超过三次树旋转(对于插入是两次)。这允许插入和删除保持为 O(log n) 次,但是它导致了非常复杂的操作。
红黑树调整参考:https://www.bilibili.com/video/av70652717?p=3 或者 https://www.jianshu.com/p/e136ec79235c