深入理解经典红黑树

💡 原文中文,约9300字,阅读约需22分钟。
📝

内容提要

本文介绍了红黑树的经典实现,与2-3-4搜索树同构。红黑树比AVL树应用更广泛的原因是在插入和删除操作混合进行的情况下,红黑树的均摊时间复杂度保持在O(1),而AVL树的均摊时间复杂度为O(logn)。文章还详细介绍了红黑树的插入和删除节点操作的实现逻辑。红黑树的删除方法的时间复杂度为O(logn)。

🔎

延伸解读

红黑树与AVL树的本质差异

文章指出,红黑树比AVL树应用更广的根本原因并非查找效率的细微差别,而是在插入和删除混合进行的场景下,红黑树的均摊时间复杂度为O(1),而AVL树为O(logn)。这意味着频繁更新的数据结构中,红黑树能提供更稳定的性能,避免AVL树因维护严格平衡而带来的较高旋转开销。

与2-3-4树同构的理解价值

经典红黑树与2-3-4搜索树同构,这一视角将红黑树的颜色规则和旋转操作映射为多路搜索树的节点分裂与合并。理解这种对应关系,有助于从更高层把握红黑树的性质,例如黑色平衡对应2-3-4树的完美平衡,插入时的反色和旋转对应4-节点的分解与向上合并。

删除操作的复杂性与修复逻辑

删除节点是红黑树中最复杂的部分,尤其是删除2-节点后需要向上修复平衡。文章按《算法导论》分为四种情况,核心思想是通过反色和旋转保持黑色平衡,且修复过程中至多进行3次旋转。虽然删除方法整体时间复杂度为O(logn),但理解这四种情况的转换关系是掌握红黑树删除的关键。

❓

Q&A

红黑树和AVL树哪个应用更广泛?为什么?

红黑树应用更广泛。根本原因是在以任意序列插入和删除操作混合进行的情况下,红黑树的均摊时间复杂度保持在O(1),而AVL树的均摊时间复杂度为O(logn)。

红黑树有哪些必须满足的性质?

红黑树满足:节点颜色为红色或黑色;根节点是黑色的;叶子节点(null节点)为黑色;红色节点的两个子节点为黑色(不能出现连续的红色节点);任意叶子节点到根节点路径上的黑色节点数量相同(黑色平衡)。

红黑树和2-3-4搜索树有什么关系?

经典红黑树与2-3-4搜索树同构。2-3-4搜索树通过增加4-节点来扩展2-3搜索树,其插入操作局部改变,不影响全局有序性和平衡性,始终是完美平衡二叉树。红黑树中的黑链接对应2-3-4树中的普通链接,因此红黑树也是黑色平衡的。

红黑树插入节点后如何修复平衡?

插入节点后调用fixAfterInsertion方法修复平衡。新插入节点默认为红色,若出现连续红色节点则循环处理:根据插入位置(左侧或右侧)和叔叔节点颜色,进行反色(叔叔为红时)或旋转加染色(叔叔为黑时),可能向上合并,最后根节点始终染黑。

红黑树删除节点时为什么复杂?删除2-节点后如何处理?

删除3-节点或4-节点(红色节点)不影响平衡;删除2-节点会破坏黑色平衡,需要向上修复。删除2-节点后分四种情况处理:情况1兄弟节点为红色,反色和左旋后转为其他情况;情况2兄弟节点为黑色且两子节点均黑,将兄弟染红并上移;情况3兄弟为黑且左子红右子黑,交换颜色和右旋转为情况4;情况4兄弟为黑且右子红,交换颜色、染黑右子并左旋父节点,结束修复。

红黑树删除操作的时间复杂度是多少?

红黑树删除方法的时间复杂度为O(logn)。含有n个节点的红黑树高度为logn,不调用fixAfterDeletion时复杂度为O(logn);fixAfterDeletion中情况1、3、4在各执行常数次颜色改变和至多3次旋转后终止,只有情况2可能重复修复,指针至多上升O(logn)次且无旋转,因此总复杂度为O(logn),最多旋转3次。

🏷️

标签

➡️

继续阅读