splay学习笔记

本文介绍了Splay树的基本概念和核心操作,包括rotate、splay和get_k函数,并详细阐述了常用操作如查找前驱/后继、插入、删除及build建树的过程。此外,文章还列举了一些使用Splay树的题目以供练习。
摘要由CSDN通过智能技术生成

splay是一种平衡树,可以解决非常多的问题,功能非常的强大,但是常数比较大。

接下来看他的几个核心函数。

核心函数

rotate

代码

void rotate(int x)
{
   
    int y = tr[x].p, z = tr[y].p;
    int k = tr[y].s[1] == x;

    tr[z].s[tr[z].s[1] == y] = x, tr[x].p = z;
    tr[y].s[k] = tr[x].s[k ^ 1], tr[tr[x].s[k ^ 1]].p = y;
    tr[x].s[k ^ 1] = y, tr[y].p = x;
    pushup(y), pushup(x);
}

作用就是旋转,把左旋右旋合一了。

也没啥好解释的,就是把z的原本y的那个位置变成x,把y的原本x的那个位置变成x的儿子,把x的儿子变成y。

splay

代码

void splay(int x, int k)
{
   
    while (tr[x].p != k)
    {
   
        int y = tr[x].p, z = tr[y].p;
        if (z != k)
            if ((tr[y].s[1] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值