什么是红黑树
是二叉搜索树和平衡二叉树的自然拓展
本身是二叉搜索树,结点中增加一个颜色的属性
构造和删除比AVL简单
插入流程和AVL一样,先插入再调整
红黑树的调整可以是染色或者是旋转,只有5种情况,并且只有2种情况要旋转
红黑树的性质
- 每个结点是红色或者黑色
- 根结点是黑色
- 度为0和1的结点的空指针域成为空叶子,也是黑色的
- 不存在两个相邻的红结点(即红结点的父结点和孩子结点均是黑色)
☆☆☆
\color{red}{ ☆ ☆ ☆ }
☆☆☆
- 对每个结点,从该结点到任一叶结点的简单路径上,所含黑结点的数目相同
☆☆☆
\color{red}{ ☆ ☆ ☆ }
☆☆☆
下图是一颗红黑树:
结论
- 从根到叶结点的最长路径不大于最短路径的2倍,即
最短的路径
∗
2
⩽
最长的路径
\color{red}{最短的路径*2\leqslant最长的路径 }
最短的路径∗2⩽最长的路径
- 有n个内部结点的红黑树的高度
h
⩽
l
o
g
2
(
n
+
1
)
h\leqslant log_{2}(n+1)
h⩽log2(n+1)
- 新插入到红黑树红的结点为红结点
红黑树的建树
插入结点默认是红色,此时所有路径上的黑色结点数目不变,仅在出现连续两个红色结点时才需要调整,而且这种调整也比较简单。
更多参考
https://zhuanlan.zhihu.com/p/139907457?utm_source=com.tencent.tim