红黑树(RBTree)
红黑树:AVL树的变种,具有如下4个条件:
1、每一个结点是红色或黑色
2、根结点是黑色。
3、如果一个节点是红色,那么它的两个子节点必须是黑色。(不能出现两个相连的红色结点)
4、从任意一个结点到一个null引用的每一条路径必须包括相同数目的黑色结点。
由于红黑树的特点得出结论:红黑树的高度最多是2log(N+1),因此其查找操作的时间复杂度为对数操作。
在将新结点作为叶结点插入树中,默认该结点为红色。如果当前节点的父节点是黑色,那么直接插入完成;而若当前节点的父节点是红色,由于违反条件3,因此需要进行调色或旋转操作。
为什么该结点默认为红色而不是黑色?
因为红黑树需要满足任意一个结点到一个null引用的每一条路径必须包括相同数目的黑色结点(条件4),若新结点为黑色,那么会导致该路径上的黑色结点数目+1,不符合红黑树的条件。
为什么要使用红黑树?
相比于二叉搜索树来讲,红黑树保证了树的平衡性,降低了树的高度,提高了树的查找性能,防止由于插入顺序(升/降序插入)导致二叉搜索树成为一条链表的情况。
相比于AVL树来