“伸展树把辅助树形状编码进势,Fibonacci 堆用根数与标记节点数为延迟合并和级联切断记账;两页分别给出具体势函数,本页不重复其旋转或堆操作。栈的批量弹出、动态数组和并查集也使用同一望远镜…”
形式陈述
伸展操作
伸展树是同时属于二叉搜索树与自调整数据结构的结构:先按普通 BST 搜索目标节点或最后访问节点,再重复旋转到根:父为根时做一次 zig;节点与父同为左孩子或同为右孩子时做 zig-zig,先转祖父再转父;方向相反时做 zig-zag,两次围绕节点旋转。split
Access lemma
令
zig-zig 同时显著缩短两层祖先链,是望远镜估计成立的关键;只把节点逐层单旋虽能移到根,却没有相同序列界。插入、删除可归约为常数次 access、split、join,因此摊还
直觉
伸展把本次访问路径整体重排,而不维护颜色或高度证书。zig-zig 与 zig-zag 让被访问节点上升的同时压缩其祖先路径;子树秩势记录这次重排积累或释放的结构能量,所以单步可线性,整段访问仍有对数摊还和更细的序列敏感界。
例子与边界
访问序列例子
若依次访问有序键
边界与开放问题
树高可为
2026 年 7 月 20 日的一份 arXiv v1 预印本给出了显著的新上界:伸展树相对离线最优动态 BST 为
竞争,并称这是首个
推论与应用
伸展树没有显式平衡字段,其访问界由势能法证明:以节点子树大小的对数秩求和为势,zig-zig 与 zig-zag 的旋转成本由秩下降支付。
序列敏感界
固定含
删除可先伸展目标到根,使左右子树分离,再伸展左树最大节点并挂接右树。若搜索未命中,通常伸展最后访问节点以保留 access lemma;什么也不伸展会改变后续序列性质。
一次访问怎样偿还旋转
设访问前路径为
一次伸展内部的双旋证明会累计被访问节点的秩增量,得到形式陈述中的 access lemma。沿多次访问相加时,真正望远镜消去的是势函数的前后差
参考资料
- Daniel Dominic Sleator、Robert Endre Tarjan,Self-Adjusting Binary Search Trees,Journal of the ACM 32(3), 1985,pp. 652–686,access lemma 与序列界。
- Robert Tarjan, Sequential Access in Splay Trees Takes Linear Time, Combinatorica, 1985.
- Petr Chmel et al., Splay Trees Are Almost Dynamically Optimal, arXiv:2607.18498v1, 20 July 2026.