最简单的红黑树解析

207 阅读3分钟

前言

本篇为最简单的红黑树解析,从特点到规则,分析添加节点的默认颜色,分析如何在添加节点时保持红黑规则。

红黑树特点

  • 红黑树是一个平衡二叉树
  • 每一个节点可以是红或者黑
  • 红黑树不是高度平衡的,它的平衡是通过"自己的红黑规则"进行实现的

五个红黑规则

1.每一个节点是红色或黑色

2.根节点必须是黑色

3.每个叶节点(Nil)是黑色的

如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点

4.不能出现两个红色节点相连的情况

5.对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点

红黑树结构图.png

添加节点的默认颜色分析

  • 添加三个黑色节点时

    • 第一次添加不需要调整
    • 第二次,第三次添加会破坏第五条红黑规则,需要由黑色调整为红色
    • 共需调整三次

添加三个黑色元素.png

  • 添加三个红色节点时

    • 第一次添加破坏第二条红黑规则,需要由红色调整为黑色
    • 第二次,第三次添加不需要调整
    • 共需调整一次

添加三个红色元素.png

  • 综上,添加红色节点时,效率更高,因此默认为红色

添加节点时如何保持红黑规则

  • 以(20)、(18)、(23)、(22)、(16)、(24)、(19)、(15)、(14)的顺序添加节点举例说明

  • 第一次添加

    • 当添加的节点为根节点时,直接调整为黑色

第一次添加.png

  • 第二次,第三次添加

    • 当添加的节点,其父节点是黑色,则不需要做任何操作

第二三次添加.png

  • 第四次添加

    • 当添加的节点,其父节点是红色叔节点也是红色

      • 将父节点和叔节点都调整为黑色
      • 将祖父节点调整为红色
      • 如果祖父节点是根节点,则将根节点再次调整为黑色

第四次添加.png

  • 第五六七次添加

    • 当添加的节点,其父节点是黑色,则不需要做任何操作

第五六七次添加.png

  • 第八次添加

    • 当添加的节点,其父节点是红色叔节点也是红色

      • 将父节点和叔节点都调整为黑色

      • 将祖父节点调整为红色

      • 如果祖父节点是根节点,则将根节点再次调整为黑色

第八次添加.png

  • 第九次添加

    • 当添加的节点,其父节点是红色叔节点是黑色

      • 将父节点调整为黑色,叔节点不做操作

      • 将祖父节点设为红色

      • 以祖父节点为支点进行旋转

第九次添加.png

  • 添加完毕

保持红黑规则的方法总结

添加节点总结.png

感兴趣的同学可以尝试列出一组随机数,对着总结的规则练习练习,基本上做一组就能记得下来,觉得有帮助的请留个赞哈,谢谢你