1、红黑树
1.1、介绍
- 红黑树(Red-Black Tree,RBT)是一个自平衡树二叉树,不是绝对的平衡,不一定要求左右子树高度之差是1以内
- 有N个节点的红黑树,高度最多只有2log(N+1)
1.2、规则
- 每一个节点只能是红色,或者黑色,二选一
- 树的根节点是黑色的
- 如果节点是红色的,那么这个节点的子节点一定是黑色的
- 从一个节点到该节点下的null节点(就是叶子节点的子节点)的每条路径下,必须包含相同数目的黑色节点
1.3、红黑树的操作
- Recoler,重新标记树的颜色
- Rotation,旋转,将树达到平衡状态
2、红黑树插入操作
1. 将新插入的X节点标记为红色
2. 如果X是根节点,那么将其标记为黑色,结束
3. 如果X的parent是红色,
3.1. 如果X的Uncle是红色
3.1.1. 将X的Parent和Uncle标记为黑色
3.1.2. 将Grand Parent祖父标记为红色
3.1.3. 将X的颜色标记为与X的祖父相同,将曾祖父作为X,重复操作2、3,直到发现根节点,将其标记为黑色
3.2. 如果X的Uncle是黑色,需要分四种情况处理
3.2.1. 左左,Parent是Grand Parent的左儿,X是Parent的左儿。这种情况很简单,想象这是一根绳子,手提起 Parent 节点,然后变色即可(将Parent变为红色,然后其作为X,重复2、3)
3.2.2. 左右,Parent是Grand Parent的左儿,X是Parent的右儿。左旋: 使 X 的父节点 Parent被 X 取代,同时父节点 Parent 成为 X 的左孩子,然后再应用3.2.1左左情况
3.2.3. 右右,Parent是Grand Parent的右儿,X是Parent的右儿。与左左情况一样,想象成一根绳子
3.2.1. 右左,Parent是Grand Parent的右儿,X是Parent的左儿。右旋: 使 X 的父节点 Parent 被 X 取代,同时父节点 Parent 成为 X 的右孩子,然后再应用3.2.3右右情况