关于Splay树时间复杂度的问题
  • 板块学术版
  • 楼主Skeleton_Huo
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/12/10 11:05
  • 上次更新2023/10/26 23:58:14
查看原帖
关于Splay树时间复杂度的问题
324632
Skeleton_Huo楼主2022/12/10 11:05

在查询数 kk 的排名的操作中, 若 kk 不在树中, 在遇到当前节点该往左走但无左儿子, 或该往右走但没有右儿子时, 直接返回答案而不执行splay操作是否仍能保证时间复杂度?

参考代码:

/*
rt为根节点
val[x]为编号为x的节点的值
*/
int rk(int k) {
        int res = 0, cur = rt;
        while (true) {
            if (k < val[cur]) {
                if (!ch[cur][0])	// 上文所描述的操作
                    return res + 1;
                cur = ch[cur][0];
            } else {
                res += sz[ch[cur][0]];
                if (k == val[cur]) {
                    splay(cur);
                    return res + 1;
                }
                res += cnt[cur];
                if (!ch[cur][1])	// 上文所描述的操作
                    return res + 1;
                cur = ch[cur][1];
            }
        }
    }
2022/12/10 11:05
加载中...