红黑树随笔

本文深入探讨了红黑树这一自平衡二叉查找树的数据结构,详细阐述了其5大特性,并解析了在插入新节点时如何通过变色和旋转操作维护红黑树的平衡,确保操作时间复杂度为O(logn)。通过实例展示了变色与左、右旋转的过程,帮助理解红黑树的内部机制。
摘要由CSDN通过智能技术生成

红黑树随笔

1. 红黑树是什么?

红黑树本质是一种自平衡二叉查找树,但是他在二叉查找树的基础上额外添加了一个标记(颜色),同时具有一定的规则(以下5种)

这些特征使红黑树保证了一种平衡,插入、删除、查找的最坏时间复杂度都为 O(logn)。

2.红黑树的5大规则
  • 节点可以是黑色或者红色
  • 根节点一定是黑色
  • 每个 叶子节点都是黑色的空节点(NIL节点)
  • 每个红色节点的左右子节点都必须是黑色
  • 从任一节点到其每个叶子节点的路径,都会经历相同的黑色节点

在这里插入图片描述

3. 变色和旋转

由于以上的5种规则限制,红黑树的在增、删节点时,需要进行变色和旋转,来适配规则。

3.1 变色

为了重新符合红黑树的规则,尝试把红色节点变为黑色,或者把黑色节点变为红色。

在这里插入图片描述

上述动图,就是发生了2次红黑树的变色;流程为:

  • 原有的红黑树中插入了一个新的数据40;
  • 40和原来的红色节点30 发生了冲突:违背了规则四(每个红色节点的左右子节点都必须是黑色),所以进行一次变色
  • 变色后,又违背了规则二(根节点一定是黑色),所以进行了二次变色。
  • 经历两次变色后,红黑树变成了符合红黑树的5大规则
3.2 旋转

调整红黑节点结构,转移黑色节点位置,使其在进行插入、删除后仍能保持红黑树的 5 条性质。

在这里插入图片描述

上述的动图发生了两次旋转;流程为:

  • 对有红黑树插入一个新的 17 节点;
  • 17 节点按照流程,插入了18节点的左边子节点;
  • 但是由于18是红色节点,为了规则四(红色节点的子节点都必须是黑色),所以执行了一次右旋转
  • 右旋转后:原本作为父节点的 18 ,变成 17 的右节点;但是旋转完成以后,还是不符合规则四;所以继续进行一次左旋转
  • 左旋转后:原本作为父节点的10,变成了17的左节点;
  • 此时已经符合红黑树的5项规则。
左旋转

逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为左孩子。

在这里插入图片描述

如图所示:

一次左旋转后,原本的父节点X变成节点Y的左孩子节点

由于Y的左孩子节点需要变成新的X,所以原本Y的左孩子 节点B 需要被断开;

X变成Y的左孩子节点后,X的右孩子节点就空出来了;

所以:原本的被断开的B节点,就插入到了X的右孩子节点

右旋转

顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为右孩子。

在这里插入图片描述

理解了左旋转,再看右旋转,就一个道理了。

如图所示:

一次右旋转后,原本的父节点X变成节点Y的右孩子节点

由于Y的左孩子节点需要变成新的X,所以原本Y的右孩子 节点C需要被断开;

X变成Y的右孩子节点后,X的左孩子节点就空出来了;

所以:原本的被断开的C节点,就插入到了X的左孩子节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值