简单理解树的旋转

Posted taming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单理解树的旋转相关的知识,希望对你有一定的参考价值。

网上的资料杂乱,树的旋转本来简单易懂但被写的很麻烦

 

请不要死记,没有意义

首先我们要明白一些原则:

旋转是以三个节点和这三个节点的子树为操作对象的

旋转会有一个旋转中心,就是位于三个节点中间的那个节点

旋转的意义不在于旋转或者考倒大家,而是通过旋转使得二叉排序树趋近平衡,然后由此引出的单旋转和双旋转,最终的目的就是为了使得结构趋于平衡

树的旋转发生的情况总共四种:

左左,右右

 技术分享图片

 技术分享图片

 

左右,右左

技术分享图片

技术分享图片

 

 三角形代表一棵子树,可以为空

由于是对称的两组,另外一组花的要假一点

 

实际还可以扯出一种情况,就是平衡状态,这种状态不需要旋转

旋转只分两种:左旋转和右旋转

技术分享图片

技术分享图片

 

然后,可以通过一次或多次旋转可以使得四种情况相互转化

 证明:

由上面的图片2可以看出,左右,左右通过一次旋转可以转化为左左,右右的情况

然后由图一不难看出,左左,右右都可以通过一次旋转变为近似平衡的结构,也就是旋转通常要达到的目标情况,如果以这一情况为中转,则可以实现左左,右右的转化

加上旋转可逆,也就是可以还原,显然几种情况是能相互转换的

也就是:

左右>左左>平衡>右右>右左

右左>右右>平衡>左左>左右

 

旋转的最终目的,是使得各种二叉排序树(AVG,Splay,Treap等等)趋紧于平衡状态

单旋转:

技术分享图片

双旋转:

 

以上是关于简单理解树的旋转的主要内容,如果未能解决你的问题,请参考以下文章

以AVL树为例理解二叉树的旋转(Rotate)操作

树的插入删除旋转归纳

[转]红黑树讲解

AVL 树的插入删除旋转归纳

数据结构 二叉树的简单理解和代码实现

数据结构——树的简单操作集合