红黑树

196 阅读2分钟

红黑树的特点

红黑树是特殊的二叉查找树,它的特点是最长的路径不可能多余最短路径的两倍。

红黑树的基本定义

  • 1、节点由红黑组成
  • 2、根节点时黑
  • 3、所有null节点都是黑色的。就是叶子节点。
  • 4、红色节点的子节点必须时黑色
  • 5、任一节点到它叶子节点经过的黑色必须一样多。

红黑树和平衡二叉树有什么区别呢?

首先这两者相比于普通二叉树来讲,比较均衡。在一些特殊情况下,普通二叉树会成为一个线性结构。

查找上讲,红黑树最长路径不会超过最短路径的两倍。而平衡二叉树的子树中左右都不会超过1,显而易见,平衡二叉树因为更均衡所以查找更快。虽然时间复杂度都是O(log n)

但插入删除操作时,平衡二叉树需要大量旋转来维持平衡。而红黑树,是通过维护颜色和旋转来维持平衡,旋转书用的相对较少。虽然时间复杂度都是O(log n)O(log n)

插入规则

1、插入的新节点都是红色,否则会破坏平衡。

如果时黑色,那么必定破坏了规则5:任一节点到它叶子节点经过的黑色必须一样多。

2、如果插入的节点的父节点和叔节点都是红色,那么就叔、父、祖父节点都要变色。
3、如果插入的新节点,父红叔黑,父和新都左,则是LL,太左了,右旋转。

image.png

4、如果插入的新节点,父红叔黑,父和新都右,则是RR,太右了,左旋转。

image.png

5、如果插入的新节点,父红叔黑,父左新右,则是LR,则下左上右。

image.png

6、如果插入的新节点,父红叔黑,父右新左,则是RL,则下右上左。

image.png

总结

这个旋转和我写的平衡二叉树一样,平衡二叉树 - 掘金 (juejin.cn)

hashmap中就有用到红黑树,虽然查找性能不如平衡二叉树,但是插入和删除更优秀。综合考量用红黑色更好。