freeCodeCamp/guide/chinese/algorithms/red-black-trees/index.md

37 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
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操作例如搜索最大最小插入删除等需要Oh时间其中h是BST的高度。对于倾斜的二叉树这些操作的成本可能变为On。如果我们确保在每次插入和删除后树的高度保持为OLogn那么我们可以保证所有这些操作的OLogn的上限。红黑树的高度始终为OLogn其中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)