37 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | ||
| title: Red Black Trees
 | ||
| localeTitle: 红黑树
 | ||
| ---
 | ||
| ## 红黑树
 | ||
| 
 | ||
| Red-Black Tree是一种自平衡二进制搜索树(BST),其中每个节点都遵循以下规则。
 | ||
| 
 | ||
| 1.  每个节点都有两个孩子,颜色为红色或黑色。
 | ||
| 2.  每个树叶节点始终为黑色。
 | ||
| 3.  每个红色节点都有两个黑色的孩子。
 | ||
| 4.  没有两个相邻的红色节点(红色节点不能有红色父节点或红色节点)。
 | ||
| 5.  从根到树叶节点的每条路径都具有相同数量的黑色节点(称为“黑色高度”)。
 | ||
| 
 | ||
| 参考样式: 
 | ||
| 
 | ||
| ### 为什么红黑树?
 | ||
| 
 | ||
| 大多数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) |