关于红黑树旋转的理解

末鹿安然 提交于 2019-11-29 14:53:57

概述

红黑树的左旋和右旋比较费解,网上很多资料说的很复杂,这里我用望文生义的思维来解释左旋和右旋。可能对搜索资料的网友有帮助。

红黑树的定义

什么是红黑树?
红黑树(英语:Red–black tree)是一种自平衡二叉查找树,
是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。
它在1972年由鲁道夫·贝尔发明,被称为"对称二叉B树",
它现代的名字源于Leo J.Guibas和RobertSedgewick于1978年写的一篇论文。
红黑树的结构复杂,但它的操作有着良好的最坏情况运行时间,
并且在实践中高效:它可以在O(logN)时间内完成查找,插入和删除,
这里的n是树中元素的数目。

红黑树的特性

红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。
在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:

1、节点是红色或黑色。
2、根是黑色。
3、所有叶子都是黑色(叶子是NIL节点)。
4、每个红色节点必须有两个黑色的子节点。(从叶子到根之间不能有两个连续红色节点)
5、从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。

这些约束确保了红黑树的关键特性:  从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。

旋转

左旋

左旋图解(x左边节点逆时针旋转):           a                          / \                                        b   x      ->        x            / \              / \           c   d            a   d                           / \                            b   c

如图以x为中心,其父节点为a,左边兄弟节点为b,左子节点为c,右子节点为d

左旋就是保证x和右子节点d不变,逆时针旋转与x节点的直接相关的左边节点,也就是a,b,c
左旋的过程是将x的父节点a,左边兄弟节点b 逆时针旋转,
原来的x左节点c被x的父节点替代,
原来x的左子节点c逆时针方向平移后变成x的原父节点a的右子节点。

 

右旋

右旋图解(x右边节点顺时针旋转):           a                      / \                      x   b      ->      x          / \                / \                         d   c              d   a                             / \                            c   b

如图以x为中心,其父节点为a,右边兄弟节点为b,左子节点为d,右子节点为c
右旋就是保证x和左子节点d不变,顺时针旋转与x直接相关的右边节点,也就是a,b,c
右旋的过程是将x的父节点a,右边兄弟节点b,还有右子节点c顺时针旋转。
原来的x右节点c被x的父节点替代,
原来的x的右子节点c顺时针方向平移后变成x的原父节点a的左子节点。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!