详细介绍红黑树 性质 定义 插入删除操作

红黑树

定义

  1. 节点是红色或黑色
  2. 根结点一定是黑色
  3. 所有叶子节点都是黑色(指的是null)
  4. 每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  5. 从任意节点到其每个叶子节点的所有路径都包含相同数目的黑色节点

时间复杂度

[O(lgn)]

性质

从根到叶子的最长的可能路径不多于最短的可能路径的两倍长(2k - 1)

插入

注:插入的节点颜色一开始都默认是红色

注:选择插入的位置和二叉搜索树的插入是一样的(删除也和二叉搜索树一样)

被插入的节点是根节点

  • 直接把此节点变为黑色

被插入的节点的父节点是黑色

  • 什么也不需要做

被插入的父节点是红节点

当前节点的祖父节点的另一个子节点(叔叔节点–父节点的父节点的另一个子节点)也是红色
  1. 将父节点变为黑色
  2. 将叔叔节点变为黑色
  3. 祖父节点变为红色
  4. 祖父节点变为当前节点,继续往上递归即可
叔叔节点是黑色,并且当前节点是父亲节点的右儿子
  1. 将父节点作为新的当前节点
  2. 以新的当前节点为支点进行左旋
叔叔节点是黑色,且当前节点是父节点的左孩子
  1. 将父节点变成黑色
  2. 将祖父节点变成红色
  3. 以祖父节点为支点进行右旋

删除

补充:二叉搜索树删除–当左右节点都非空时

  1. 找到该节点的右子树中的最左节点(也就是右子树中序遍历的第一个节点)
  2. 把它们的值和要删除的节点的值进行交换
  3. 然后删除这个节点即相当于把我们想删除的节点删除了(方法可以转换成只有左节点或只有右节点或是叶子节点的情况)

前情提要

  • 红+黑和黑+黑是指,当一个红节点或黑色节点被删除后,为了是的红黑树性质五不被破坏,会将其颜色保留加到上一个节点以维护性质五。
  • 删除的是红色点时无需做任何操作
  • 删除的是黑色点时,将子节点上移并变成红+黑或黑+黑

1. x指向一个红+黑节点

将x设为一个黑节点即可

2. x指向根

将x设为一个黑节点即可

3.1 x的兄弟节点是红色

  1. 将x的兄弟节点设为黑色
  2. 将x的父节点设为红色
  3. 对x的父节点进行左放
  4. 左旋后,重新设置x的兄弟节点

3.2 x的兄弟节点是黑色,x的兄弟节点的两个孩子都是黑色

  1. 将x的兄弟节点设为红色(将兄弟节点变为红色)
  2. 设置x的父节点为新的x节点(将处理的节点往上移一层)

3.3 x的兄弟节点是黑色,x的兄弟节点的左孩子是红色,右孩子是黑色的

  1. 将x兄弟节点的左孩子设为黑色
  2. 将x兄弟节点设为红色
  3. 对x的兄弟节点进行右旋
  4. 右旋后,重新设置x的兄弟节点

3.4 x的兄弟节点是黑色,x的兄弟节点的右孩子是红色的,x的兄弟节点的左孩子任意颜色

  1. 将x父节点颜色赋值给x的兄弟节点
  2. 将x父节点设为黑色
  3. 将x兄弟节点的右子节点设为黑色
  4. 对x的父节点进行左旋(旋转后即可从黑+黑变为黑色)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值