红黑树的简单认识(未完工)

红黑树

1)红黑树性质

​ 红黑树,Red-Black Tree 「RBT」是一个自平衡(不是绝对的平衡)的二叉查找树(BST),树上的每个结点都遵循下面的规则:

​ 1.结点是红色或黑色;

​ 2.根节点和叶子结点(NIL节点)是黑色;

​ 3.每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点);

​ 4.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点;

5.根节点必黑,新增是红色,只能黑连黑,不能红连红; 爸叔通红就变色,爸红叔黑就旋转,哪边黑往哪边转。(记忆重点)

2) 红黑树两大操作:变色(Recolor)和旋转(Rotation)

(1)为什么需要变色和旋转?

​ 在红黑树进行插入和删除的操作后,可能会打破红黑树的四条性质。而变色和旋转,能够帮助我们维护红黑树的四条性质,保持红黑树的平衡

(2)平衡步骤

​ 假设新插入的结点为 X

​ 1.将新插入的结点 X 标记为红色;

​ 2.如果结点 X 是根节点(root),则标记为黑色;

​ 3.如果结点 X 的 parent 结点是红色,且结点 X 不是根节点(root):

​ 3.1 如果 X 的 uncle (叔叔,parent结点的兄弟结点) 是红色

​ 3.1.1 将 parent 和 uncle 标记为黑色

​ 3.1.2 将 grand parent (祖父) 标记为红色

​ 3.1.3 让 X 节点的颜色与 X 祖父的颜色相同,然后重复步骤 2、3

​ 例子:

在这里插入图片描述

​ 套用上面的公式:

  1. 将新插入的 X 结点标记为红色

  2. 发现 X 结点的 parent 和 uncle 结点都为红色

  3. 将 parent 和 uncle 结点变为黑色;

  4. 将 X 和 X 的祖父结点 G 标记为相同颜色,即红色;

  5. 若此时发现结点 G 为根节点,则标记根节点 G 为黑色;若此时结点 G 不为根节点,则此时让结点 X 等于 结点 G ,继续往上调整(如下图所示进行向上调整);

  6. 结束。
    在这里插入图片描述

​ 3.2 如果 X 的 uncle (叔叔,parent结点的兄弟结点) 是黑色,分四种情况处理:

​ 3.2.1 LL平衡旋转(P 是 G 的左孩子,并且 X 是 P 的左孩子)

在这里插入图片描述

​ 3.2.2 RR平衡旋转(P 是 G 的右孩子,并且 X 是 P 的右孩子)

在这里插入图片描述

​ 3.2.3 LR平衡旋转(P 是 G 的左孩子,并且 X 是 P 的右孩子)
在这里插入图片描述

​ 3.2.4 RL平衡旋转(P 是 G 的右孩子,并且 X 是 P 的左孩子)

在这里插入图片描述

(如果对旋转操作有疑惑,可以看平衡二叉树的旋转操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值