Splay树(伸展树)

伸展树是一种自调整的二叉搜索树,通过伸展操作将频繁访问的节点移近根部,均摊时间复杂度为O(logN)。它不维护额外的平衡信息,而是通过每次查询后的提根操作实现平衡。伸展树包括点操作(插入、删除、查找)和区间操作(合并、划分),适用于各种动态查询和修改场景。
摘要由CSDN通过智能技术生成

伸展树(Splay Tree),是一种二叉平衡搜索树,时间复杂度均摊为O(logN),即splay树做m次操作的复杂度为O(mlogN)。

在伸展树上的一般操作都基于伸展操作/提根操作

假设想要对一个二叉搜索树执行一系列的查找操作,为了使整个查找时间更小,被查频率高的那些条目就应当经常处于靠近树根的位置。于是想到设计一个简单方法, 在每次查找之后对树进行重构,把被查找的条目搬移到离树根近一些的地方。伸展树应运而生。伸展树是一种自调整形式的二叉搜索树,它会沿着从某个节点到树根之间的路径,通过一系列的旋转把这个节点搬移到树根去。

伸展树与AVL树,Treap树不同的是,Splay树不需维护其他性质,他是通过对每次查询,插入处理到的节点进行提根操作来达到这一效果的。它的优势在于不需要记录用于平衡树的冗余信息。

可以证明:伸展树时间复杂度均摊为O(logN)。

伸展/提根的具体形式:两种单旋,四种双旋

单旋:zig(左旋),zag(右旋)

双旋:zig-zig,zag-zag,zag-zig,zig-zag

zig操作(zig(x)):当x的父亲p是原树的根,并且x是p的左儿子的时候进行,效果如图(zag操作类似)。


zig-zig

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值