伸展树(Splay Tree)的旋转

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

 

      令X是在访问路径上的一个非根节点,我们将在这个路径上实施旋转操作。

      1. 如果X的父结点是树根,那么只需要旋转X和树根(具体见AVL树的单旋转)

      2. 否则,X就有父亲(P)和祖父(G),存在两种情况以及对称的情形要考虑

          a. 之字形情形(zig-zag)

伸展树(Splay Tree)的旋转_第1张图片

 

          b. 一字型情形(zig-zig)

 

伸展树(Splay Tree)的旋转_第2张图片

 

以上内容来自《数据结构与算法分析C语言描述》

你可能感兴趣的:(数据结构,c,算法,tree,百度,语言)