红黑树是一种含有红黑结点的自平衡二叉查找树。
性质:
- 节点不是黑色就是红色,根节点一定是黑色的
- 根到叶子的所有路径,不可能存在两个连续的红色节点
- 叶子节点都为黑色,且为null
- 每个节点到叶子节点的所有路径,都包含相同数目的黑色节点(相同的黑色高度)
三种操作:左旋、右旋、变色
红黑树的插入操作
插入步骤:
- 根据二叉搜索树的特性,找到新的节点合适的插入位置,即找到它的父节点
- 决定作为父节点的左孩子还是右孩子
- 标记为红色节点,可能破坏红黑树规则需要变色+旋转
调整情形:
-
新插入节点的父节点是黑色节点,红黑树不需要调整
-
新插入节点的父节点和叔叔节点都为红色节点,红黑树需要变色
发现子结点和父节点都为红,那么父节点和叔叔节点均变为黑色,爷爷节点变为红,如果发现爷爷节点和再上层节点都为红,爷爷节点变为子结点重复该操作,直到平衡或者根节点,根节点恒为黑色节点不变色。
举例:
插入【51】出现不平衡
- 【51】和【49】都为红色,将【49】和【43】变为黑色,这时根节点的左子树比右子树黑色节点多1,需要将【45】变为红色消除这个影响
- 【45】变为红色后,【56】也是红色,继续将【56】和【68】变为黑色,因为【60】是根节点,不变色。
变色后的结果:
-
新插入节点的父节点为红色,叔叔节点为叶子节点ÿ