红黑树的特点
红黑树是特殊的二叉查找树,它的特点是最长的路径不可能多余最短路径的两倍。
红黑树的基本定义
- 1、节点由红黑组成
- 2、根节点时黑
- 3、所有null节点都是黑色的。就是叶子节点。
- 4、红色节点的子节点必须时黑色
- 5、任一节点到它叶子节点经过的黑色必须一样多。
红黑树和平衡二叉树有什么区别呢?
首先这两者相比于普通二叉树来讲,比较均衡。在一些特殊情况下,普通二叉树会成为一个线性结构。
查找上讲,红黑树最长路径不会超过最短路径的两倍。而平衡二叉树的子树中左右都不会超过1,显而易见,平衡二叉树因为更均衡所以查找更快。虽然时间复杂度都是O(log n)
但插入删除操作时,平衡二叉树需要大量旋转来维持平衡。而红黑树,是通过维护颜色和旋转来维持平衡,旋转书用的相对较少。虽然时间复杂度都是O(log n)O(log n)
插入规则
1、插入的新节点都是红色,否则会破坏平衡。
如果时黑色,那么必定破坏了规则5:任一节点到它叶子节点经过的黑色必须一样多。
2、如果插入的节点的父节点和叔节点都是红色,那么就叔、父、祖父节点都要变色。
3、如果插入的新节点,父红叔黑,父和新都左,则是LL,太左了,右旋转。
4、如果插入的新节点,父红叔黑,父和新都右,则是RR,太右了,左旋转。
5、如果插入的新节点,父红叔黑,父左新右,则是LR,则下左上右。
6、如果插入的新节点,父红叔黑,父右新左,则是RL,则下右上左。
总结
这个旋转和我写的平衡二叉树一样,平衡二叉树 - 掘金 (juejin.cn)
hashmap中就有用到红黑树,虽然查找性能不如平衡二叉树,但是插入和删除更优秀。综合考量用红黑色更好。