码迷,mamicode.com
首页 > 其他好文 > 详细

简单理解树的旋转

时间:2018-10-21 21:50:26      阅读:1295      评论:0      收藏:0      [点我收藏+]

标签:ext   转化   二叉排序树   text   网上   技术   证明   目标   分享   

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

 

请不要死记,没有意义

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

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

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

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

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

左左,右右

 技术分享图片

 技术分享图片

 

左右,右左

技术分享图片

技术分享图片

 

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

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

 

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

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

技术分享图片

技术分享图片

 

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

 证明:

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

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

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

也就是:

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

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

 

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

单旋转:

技术分享图片

双旋转:

 

简单理解树的旋转

标签:ext   转化   二叉排序树   text   网上   技术   证明   目标   分享   

原文地址:https://www.cnblogs.com/TAMING/p/9826611.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!