--- title: Red Black Trees localeTitle: 红黑树 --- ## 红黑树 Red-Black Tree是一种自平衡二进制搜索树(BST),其中每个节点都遵循以下规则。 1. 每个节点都有两个孩子,颜色为红色或黑色。 2. 每个树叶节点始终为黑色。 3. 每个红色节点都有两个黑色的孩子。 4. 没有两个相邻的红色节点(红色节点不能有红色父节点或红色节点)。 5. 从根到树叶节点的每条路径都具有相同数量的黑色节点(称为“黑色高度”)。 参考样式: ![alt text](https://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Fibonacci_Tree_as_Red-Black_Tree.svg/2000px-Fibonacci_Tree_as_Red-Black_Tree.svg.png "斐波纳契红黑树的例子") ### 为什么红黑树? 大多数BST操作(例如,搜索,最大,最小,插入,删除等)需要O(h)时间,其中h是BST的高度。对于倾斜的二叉树,这些操作的成本可能变为O(n)。如果我们确保在每次插入和删除后树的高度保持为O(Logn),那么我们可以保证所有这些操作的O(Logn)的上限。红黑树的高度始终为O(Logn),其中n是树中的节点数。 ### 与AVL树的比较 与红黑树相比,AVL树更加平衡,但它们可能在插入和删除期间引起更多旋转。因此,如果您的应用程序涉及许多频繁的插入和删除,那么应该首选红黑树。如果插入和删除频率较低且搜索操作更频繁,那么AVL树应优先于红黑树。 ### 左倾红黑树 左倾红黑(LLRB)树是一种自平衡二分搜索树。它是红黑树的变体,保证了操作的渐近复杂度,但设计更容易实现。 ### 左倾红黑树的性质 所提出的所有红黑树算法的特征在于在N个密钥树中由log N的小常数倍限定的最坏情况搜索时间,并且在实践中观察到的行为通常比最坏情况下,接近检查的最佳log N节点,这将在完美平衡的树中观察到。 具体来说,在一个由N个随机键构建的左倾红黑色2-3树中: - >随机成功搜索检查log2 N - 0.5节点。 - >平均树高约为2 log2 N. #### 更多信息: * [来自算法和数据结构的视频](https://www.youtube.com/watch?v=2Ae0D6EXBV4)