当前位置: 首页 > news >正文

二叉搜索树——红黑树

红黑树

  • 概念
  • 红黑树的原理
  • 红黑树的效率
  • 红黑树的插入规则
    • 变色
    • 旋转+变色
    • 红黑树的验证
  • 代码如下

概念

红黑树本质也是一颗二叉搜索树,他的每个结点增加⼀个存储位来表⽰结点的颜⾊,可以是红⾊或者⿊⾊。通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍,因⽽是接近平衡的。
红黑树与AVL树相比对于平衡的要求更加宽松,也就是说红黑树相比于AVL树是少了很多旋转的过程。
红黑树的创建需要遵循以下四个规则

  1. 每个结点不是红⾊就是⿊⾊
  2. 根结点是⿊⾊的
  3. 如果⼀个结点是红⾊的,则它的两个孩⼦结点必须是⿊⾊的,也就是说任意⼀条路径不会有连续的红⾊结点。
  4. 对于任意⼀个结点,从该结点到其所有NULL结点的简单路径上,均包含相同数量的⿊⾊结点。
    在这里插入图片描述
    注意:第四点是要求到所有的NULL结点而不是叶子结点,因此在《算法导论》中,其将所有的NULL结点写成黑色的NIL。

在这里插入图片描述

红黑树的原理

红黑树是如何确保最长路径不超过最短路径的两倍的?

  1. 由规则4可知,从根到NULL结点的每条路径都有相同数量的⿊⾊结点,所以极端场景下,最短路径就就是全是⿊⾊结点的路径,假设最短路径⻓度为bh(black height)。
  2. 由规则2和规则3可知,任意⼀条路径不会有连续的红⾊结点,所以极端场景下,最⻓的路径就是⼀⿊⼀红间隔组成,那么最⻓路径的⻓度为2*bh。
  3. 综合红⿊树的4点规则⽽⾔,理论上的全⿊最短路径和⼀⿊⼀红的最⻓路径并不是在每棵红⿊树都存在的。假设任意⼀条从根到NULL结点路径的⻓度为x,那么bh <= h <= 2*bh。

红黑树的效率

如果N是红黑树的结点,h是最短路径长度,所以2h<=N<22*h-1,所以时间复杂度约为logN

红黑树的插入规则

变色

首先,插入的结点一定是红色的,因为这才不会改变整体每条路径上的黑色结点数目,这里就需要进行分类了

  1. parent直接为黑色,直接插入红色结点即可。
  2. parent为红色,由于不能有连续的红色结点,所以需要将parent变为黑色,但由于需要保证黑色结点数目不变,这里如果uncle存在且为红,就将parent与uncle都变为黑色,同时将grandparent变为黑色。
    这两种情况只需要进行变色处理而不用旋转

旋转+变色

如果uncle存在且为黑色或者uncle不存在,那就需要进行旋转+变色,如果是这样

//		g
//   p		u
// c
//或者
// 		g
//	 p
//c

就进行右单旋+变色,将parent变为黑色,grandparent变为红色,其余情况就不一一列举,有右单旋+变色,有双旋+变色,旋转的情况和AVL其中一样。

红黑树的验证

验证该树是不是红黑树,其实只需要判断每条路径上面的黑色结点是否相同即可

代码如下

红黑树

相关文章:

  • 投稿Cover Letter怎么写
  • 简单cnn
  • Deepin 20.9社区版安装Docker
  • c++第四课(基础c)——布尔变量
  • 深入Java性能调优:原理详解与实战
  • Linux基本指令/下
  • 【判断数字递增】2021-12-19
  • 第二章支线三 ·《CSS炼金术:动画与变换高级奥义》
  • 《重新定义高效微调:QLoRA 4位量化的颠覆式创新解析》
  • WIFI中2.4G和5G的区别,和WiFi5,WiFi6和WiFi7的区别,
  • 【七. Java字符串操作与StringBuilder高效拼接技巧】
  • transformer 输入三视图线段输出长宽高 笔记
  • SSM框架前后端网站显示不出来图片
  • windows+APP PDFgear 免费工具
  • Python训练营打卡Day41
  • 5.31 day33
  • 特征图可视化代码
  • Java中的ConcurrentHashMap的使用与原理
  • Ros真(node?package?)
  • DeepSeek部署实战:常见问题与高效解决方案全解析
  • 在猪八戒网站如何做兼职/百度自然搜索排名优化
  • 学网站开发应该学什么软件/哈尔滨seo推广优化
  • 无经验可以做网站编辑吗/百度seo技术
  • 专业论坛网站开发开发/搜索引擎优化排名优化培训
  • 做软装什么网站可以/品牌整合推广
  • 自己做视频网站能赚钱吗/广州网站关键词排名