专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

貌似简单的红黑树

红黑树规则

  • 1.节点分为红色或者黑色;
  • 2.根节点必为黑色;
  • 3.叶子节点都为黑色,且为null;
  • 4.连接红色节点的两个子节点都为黑色(红黑树不会出现相邻的红色节点);
  • 5.从任意节点出发,到其每个叶子节点的路径中包含相同数量的黑色节点;
  • 6.新加入到红黑树的节点为红色节点;

时间复杂度

查找跟插入都是 log(n)

变化规律

1.父节点是黑色,直接插入,不用做任何操作,因为默认插入是红色节点

2.父节点是红色:有三种情况

2.1父节点是红色,情况一:叔父节点为空

例子

  • 情况:现在树上有了 50,60,插入 70,默认新节点为红色,发现 60跟70都是红色 违法了红黑树相邻节点不能都为红色
  • 解决:1.旋转 + 变色

70_1.png

2.2,情况二:叔父节点为红色

例子

  • 情况:节点现在又 50,60,70,加入80,默认红色节点,发现70跟80都是红色,违法红黑树相邻节点不能都为红色
  • 解决:变色

70_2.png

2.3父节点是红色,情况三:叔父节点为黑色

例子:

  • 情况:在图1的情况下插入100此时100跟90同时红色,违法了红黑树相邻节点不能都为红色
  • 解决:根据上面的情况此时父节点跟叔父节点都是红色,满足情况二,进行变色,变色后是图2,但是此时又有问题,80跟85都为红色,违法红黑树相邻节点不能都为红色,此时85的父节点是红色,叔父节点为黑色,这就是情况三,遇到这种情况改着解决,其实跟情况一类似:旋转+变色
  • 旋转+变色之后就是图3,注意这个时候是60围绕着80旋转,60变红色,80变黑色,原本80的子节点变为60的子节点
  • 所以这种情况也是旋转+变色

图1:

70_3.png

图2:

70_4.png

图3

70_5.png

总结: 红黑树的变化大概就这几种情况,万变不离其中,但是要先了解什么是左旋,什么是右旋。

文章永久链接:https://tech.souyunku.com/26683

未经允许不得转载:搜云库技术团队 » 貌似简单的红黑树

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们