缘起
在此之前,笔者写过一篇关于TreeMap工作原理的简单解析,其中限于当时知识和时间有限,暂没有解析关于树的旋转和变色等操作。后来笔者查询了一部分资料也参考了很多文章,终于弄清楚变色和旋转是如何工作的。本文主要详解一下红黑树的变色和旋转是如何工作的。
为什么红黑树要旋转和变色
这需要从红黑树的特效说起,红黑树发明之初就定义了以下5个特性,因为这几个特性,使得红黑树成为一个相对平衡的二叉树,也就能提高红黑树的工作效率。
红黑树是一种自平衡的二叉查找树,它在二叉查找树的基础上又具备如下特征:
- 节点是红色或黑色。
- 根节点是黑色。
- 每个叶子节点都是黑色的空节点(NIL节点)。
- 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
- 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
如下图,就是一颗典型的红黑树:
为了满足如上的规则,实现结构的平衡,我们在插入或删除节点的时候,就需要做一些相应的调整。
例如:
向原红黑树插入值为21的新节点: