📅  最后修改于: 2020-12-10 06:26:48             🧑  作者: Mango
红黑树是自平衡二进制搜索树的类别。它由鲁道夫·拜耳(Rudolf Bayer)于1972年创建,他将其称为“对称二叉B树” 。
红黑树是二叉树,其中特定节点具有颜色作为额外属性,无论是红色还是黑色。通过检查从根到叶的任何简单路径上的节点颜色,红黑树确保该路径的长度不超过其他任何路径的两倍,因此树通常是平衡的。
红黑树必须满足以下属性:
如果树的根是红色,则树T几乎是一棵红黑树(ARB树),但是上面的其他条件成立。
搜索树操作TREE-INSERT和TREE-DELETE在带有n个键的红黑树上运行时,花费O(log n)时间。因为他们自定义树,所以结论可能违反了红黑色属性。要恢复这些属性,我们必须更改树中某些节点的颜色,并更改指针结构。
红黑树上的重组操作通常可以在旋转操作的细节中更清楚地表达。
显然,旋转操作会保留顺序(Ax C)。因此,如果我们从BST开始并且仅使用旋转进行重组,那么我们将仍然具有BST,即旋转不会破坏BST属性。
示例:在键{1,2,3 … 15}上绘制高度为3的完整二叉树。添加NIL叶子并以三种不同的方式为节点着色,以使生成的树的黑色高度为:2、3和4。
解:
黑高2的树
黑高3树
黑高4树
差异可以由父母和孩子都有红色决定。这种类型的差异取决于与祖父母有关的节点的位置以及父级的同级的颜色。
在插入新节点之后,将此新节点着色为黑色可能会违反黑色高度条件,而将此新节点着色为红色可能会违反着色条件,即根为黑色,红色节点没有红色子节点。我们知道违反黑高度的规定很难。因此,我们将节点涂成红色。此后,如果有任何颜色冲突,那么我们必须通过RB-INSERT-FIXUP过程进行纠正。
示例:显示在将键41、38、31、12、19、8依次插入到最初为空的红黑树之后生成的红黑树。
插入41
插入19
因此,最后一棵树是
首先,搜索要删除的元素
策略RB-DELETE是对TREE-DELETE程序的微小更改。拼接节点后,它会调用辅助过程RB-DELETE-FIXUP,该过程会更改颜色并执行旋转操作以恢复红黑色属性。
示例:在前面的示例中,我们发现了红黑树是由于将键41、38、31、12、19、8依次插入到最初为空的树中而产生的。现在显示成功删除键顺序为8、12、19、31、38、41的红黑树。
解:
删除38
删除41
没有树。