splay树前导知识/树的旋转

现在开始学习splay树。splay树的核心操作就是树的旋转现在我们开始学习树的旋转。

树的单旋

树的单旋有两种,是基本的操作。

1.左旋(ZAG)

针对一个节点进行左旋:

第一步:建立指针指向这个节点
第二步:将该节点的右孩子左孩子挂载成为当前节点的右孩子
第三步:将指针指向该节点的右孩子,将该节点挂在到它的右孩子上,成为它的右孩子左孩子

别慌。。。见图所示:
我们对1节点进行右旋:
第一步:
在这里插入图片描述
第二步:
在这里插入图片描述
第三步:
在这里插入图片描述

2.右旋(ZIG)

右旋对左旋就是镜像关系:
针对一个节点进行左旋:

第一步:建立指针指向这个节点
第二步:将该节点的左孩子右孩子挂载成为当前节点的左孩子
第三步:将指针指向该节点的左孩子,将该节点挂在到它的左孩子上,成为它的左孩子右孩子

不再如图。
有代码:

inline void lrot(int &now)
{
    int r = tr[now].r;
    tr[now].r = tr[r].l;
    tr[r].l = now;
    now = r;
}//左旋
inline void rrot(int &now)
{
    int l = tr[now].l;
    tr[now].l = tr[l].r;
    tr[l].r = now;
    now = l;
}//右旋
树的双旋
1.一字型双旋(同构调整)

此种旋转是对一字型结构的:

一个节点和它的左孩子、它左孩子的左孩子
或者是 一个节点和它的右孩子、它右孩子的右孩子

如图:
在这里插入图片描述
或者它的镜像。

(1)对于上图的结构我们对根节点进行两次ZIG操作。(ZIG-ZIG)

1.对1进行ZIG
2.对2进行ZIG

得到:
第一步:
在这里插入图片描述
第二步:
在这里插入图片描述
(2)对于镜像的那种,我们同理有ZAG-ZAG操作。

1.之字型双旋(异构调整)

此种旋转是对之字型结构的:

一个节点和它的左孩子、它左孩子的右孩子
或者是 一个节点和它的右孩子、它右孩子的左孩子

同理有ZIG-ZAG、ZAG-ZIG两种操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值