红黑树实现原理

前言

二叉排序树存在劣化情况 二叉平衡树为了维持查找性能在插入和删除的时候开销太大 红黑树就出现了。红黑树不像二叉平衡树在任意时刻两个子树高度差相差最多1 参考自 http://www.sohu.com/a/201923614_466939

性质

  • 节点由红色和黑色构成,根节点为黑色
  • 叶子节点由黑色的NIL节点构成
  • 红色节点的子节点一定是黑色节点,并且一定包含两个叶子节点。这意味着不存在连续的两个红色节点。
  • 从任意一个节点出发,到任意一个NIL节点,都经历了相同数目的黑色节点

image.png

这意味着从根节点出发,到任意一个叶子节点,最长路径和最短路径差不超过最长路径的一半。这种情况下,最长路径和最短路径的黑色数目一样,最长路径最多多黑色个红色节点。

变色与旋转

当插入一个节点(或删除一个节点),红黑树的性质被破坏。使用变色和旋转来调整。

变色

如果两个节点连续为红色,需要变色

旋转

如果有一条路径上的黑色节点太多,需要旋转

变色与旋转的条件

这个之后在总结

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计