Splay Tree也是一种特殊的BST,它不保证树是平衡的,但各种操作的平摊时间复杂度是O(log n)。
查询
出发点:根据局部性原理,应当把查询频率高的节点转到接近树根的地方。
因此,每次查询过后,将被查询节点旋转到树根的位置(且不打乱大小排序)。
- 简易伸展树(逐层伸展)
- 以父节点为轴的旋转
- 最坏情况下,单次访问的分摊时间复杂度高达O(n)。
- 双层伸展
- zig-zig / zag-zag
- zig-zag / zag-zig
- 注意到旋转前后W, X, Y, Z从左到右的顺序没有改变。
- 双层调整策略的高度折半效果。