一、红黑树的来历
平衡二叉树最大的作用就是查找,AVL树的查找、插入和删除在平均和最坏情况下都是O(logn)。但是如果在AVL树中插入或删除节点后,使得某一结点的平衡因子>=2。此时,AVL树的平衡状态就被破坏,它就不再是一棵二叉树;为了让它重新维持在一个平衡状态,就需要对其进行旋转处理, 那么创建一颗平衡二叉树的成本其实不小. 这个时候就有人开始思考,并且提出了红黑树的理论,
二、红黑树的定义
1.每个节点不是红色就是黑色
2.根节点是黑色
3.每个叶子节点(NIL节点,空节点)是黑色的
4.如果一个节点是红色的,则他的子节点必须是黑色的
5.从一个节点到该节点的所有子孙节点的所有路径上包含相同数目的黑色节点
注意
1.特性3中的叶子节点,是只为空 (NIL或null)的节点 2.特性5,确保没有一条路径会比其他路径长两倍,因而,红黑树是相对接近平衡的二叉树。
三、红黑树的生成
第一步:将红黑树当成一颗有序二叉树,将节点插入。
红黑树本身就是一颗有序二叉树,将节点插入后,该树仍然是一颗有序二叉树。这也意味着,树的键值仍然是有序的。
第二步:将插入的节点着色为“红色”。
为什么是红色呢?在回答这个问题之前我们需要先复习一下红黑树的特性。
特性5:从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑色节点
将插入的节点写为红色,就不会违背特性5,少违背一条特性,也就意味着我们需要处理的情况也就越少。接下来我们只需要将这颗二叉树满足其他的特性即可。
第三步:通过一系列的旋转和着色操作,使之成为一颗红黑树