红黑树
红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。 在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:
性质1. 节点是红色或黑色。
性质2. 根节点是黑色。
性质3.所有叶子都是黑色。(叶子是NUIL节点)
性质4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5.. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
以上出自百度百科
从字面意思上来理解(个人理解,如有错误欢迎指正):
性质1、性质2和性质5不用多说
性质3:红黑树中你所检索的数据肯定不是叶子节点既红黑树中所有有效结点都不是叶子节点
性质4:红色节点的父节点和子节点都是黑色,但是黑色节点父节点和子节点可能是黑色
红黑树的插入
红黑树的插入错做主要分为两部分工作,这两部分工作和二叉平衡树的插入类似,都是先找到插入位置,再进行自平衡。
不一样的地方就是自平衡的规则:
红黑树删除
二叉树删除结点找替代结点有3种情情景:
- 情景1:若删除结点无子结点,直接删除
- 情景2:若删除结点只有一个子结点,用子结点替换删除结点
- 情景3:若删除结点有两个子结点,用后继结点(大于删除结点的最小结点)替换删除结点
(二叉树: 一个结点的前驱,是小于x.key的最大关键字的结点,一个结点的后继,是大于x.key的最小关键字的结点)