树的旋转

在学习红黑树,树堆,平衡树的时候我们经常会看到一个树的操作---旋转。树的旋转之前也只是机械记忆而已,但机械记忆的东西终归不是自己的,这说明自己没有理解到其中的精髓。

 
定义:树旋转是二叉树中一种子树调整操作,每一次旋转不会影响二叉树的中序遍历结果。
 
二叉树的中序遍历结果可以用投影的方式快速得到,如图所示:
 
如果这是一颗搜索树,那么中序遍历的顺序一定是自小而大的,这点很重要,也就是树的旋
转不会影响树的搜索功能特性。
 


右旋:以某一个点为转轴,向右转动,不可影响中序遍历结果。左旋一样。
左右旋是互逆的。
 
先看下大致的图片
 
 
我们的问题在于如何理解记忆
 
1.确定旋转轴,这个旋转轴是在自己指定的。
2.将以旋转轴为根的子树单独抽出来进行旋转。
3.假定我指示了,Q为右旋旋转轴,这意味着其子孙应该以q为中心向顺时针旋转,很明显
c是不可以选择的,因为一旦c旋转了,中序遍历结果就发生了变化,p可以旋转,成为q的
父亲,那么b就被抛弃了,为了不改变中序遍历结果,b作为q的一个孩子重新连接。
 
那么整个右旋过程为:选择一个旋转点,右孩子不动,左孩子右旋为自己的父亲,左孩子的
右孩子成为自己的左儿子。右旋为右孩子不动,左孩子旋转为自己的父亲,左孩子遗弃的孩
子作为自己的新孩子。
 
左旋正好相反。
 
 
最后记忆几个关键句子:
 
旋转轴肯定是根
旋转的对象肯定是孩子
左旋肯定旋转右孩子,右旋肯定旋转左孩子
被旋转的孩子成为新根
中序遍历结果不受影响
旋转涉及到的父子关系的改变最多两条(如右旋中的只有pq,cb是新的关系)

转载于:https://www.cnblogs.com/SimpleISP/p/5280276.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值