红黑树(Red-Black Tree)是一种自平衡的二叉查找树,它是由节点的颜色和结构性质来维持平衡的。红黑树的形成可以追溯到1972年,由 Rudolf Bayer 提出,并由 Guibas 和 Sedgewick 进一步完善。
红黑树的作用主要在于提供高效的插入、删除和查找操作。它通过保持以下五个性质来实现平衡:
- 每个节点是红色或黑色。
- 根节点是黑色。
- 每个叶子节点(NIL 节点)是黑色。
- 如果一个节点是红色,那么它的两个子节点都是黑色。
- 对于每个节点,从该节点到其子孙叶子节点的简单路径上,均含有相同数目的黑色节点。
这些性质保证了红黑树的高度差不会超过两倍,从而保证了插入、删除和查找操作的时间复杂度为 O(log n)。
以下是一个简单的例子,展示了一个红黑树的结构:
11 (黑)/ \7(红) 15(黑)/ \ / \5(黑) 9(黑) 13(红) 20(红)
在这个例子中,根节点是黑色,叶子节点为NIL节点,每个红色节点的两个子节点都是黑色,每条从根到叶子节点的路径上都有相同数目的黑色节点。
当向红黑树中插入或删除节点时,会通过旋转和重新着色来保持红黑树的平衡性质。插入和删除操作的具体过程可以根据情况分为四种情况:
- 黑节点的两个子节点都是红色:此时可以通过重新着色将两个红色节点转换为黑色节点,并将父节点着色为红色,然后递归处理上层。
- 在左子树的左子树上插入或删除节点:此时可以通过右旋转来保持红黑树的平衡。
- 在右子树的右子树上插入或删除节点:此时可以通过左旋转来保持红黑树的平衡。
- 在左子树的右子树上插入或删除节点:此时可以通过先左旋转再右旋转来保持红黑树的平衡。
通过这些操作,红黑树能够保持平衡并且保证高效的插入、删除和查找操作。
总结起来,红黑树是一种高效的自平衡二叉查找树,通过保持节点的颜色和结构性质来实现平衡。它的形成可以追溯到1972年,作用主要在于提供高效的插入、删除和查找操作。以上是关于红黑树的形成、作用和一个例子的详解。