1. 红黑树的基本原理
![](https://i-blog.csdnimg.cn/blog_migrate/5dc2ac5f05c6a7f3a46e8109f9b925d4.png)
如图一,N个黑色节点排列,如果把任意多个红色节点插入到这个排列中,要求是不能出现两个红色节点挨在一起,显而易见的是最终这个排列的长度为N到2N+1之间。而红黑树就是通过这个原理控制左右子树的平衡的。(与AVL树相比,这种控制要求相对宽松很多,相同规模下,红黑树要比AVL树高)
2. 红黑树的基本规则
- 非黑即红:树节点有红色和黑色两种状态。(不解释)
- 昙花一现:两个红色节点不能有父子关系。(基本原理所要求的)
- 天下乌鸦一般黑:树的每条贯穿的路径上的黑色节点数相等。(基本原理所要求的,需要注意的是,这一条贯穿路径并不一定是根节点到叶子节点,只要一个节点没有左儿子或没有右儿子,都可以作为贯穿路径的终点。为了方便分析,可以仿照黑红决定,指定空节点为黑,加上空节点后,贯穿路径就是根节点到叶子节点了)
- 红黑决定:树的根节点规定为黑。(任何符合上面三个要求的红黑树,倘若根节点为红,都可以不加思索的将根节点涂黑而不违反前三条规则。倘若根节点为黑,这时可不能随随便便涂成红,因为怕它的子节点为红。为了使算法更容易编写,特此决定根节点为黑)</