伸展树---初步学习

  1.什么是伸展树。

  Splay Tree 中文叫伸展树,或者分裂树。伸展树是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它的优势在于不需要记录平衡树的冗余信息。

  2.为什么会有伸展树

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

  3.怎样旋转搬移至树根?

  假设当前被访问节点为X,X的父亲节点为P(如果X的父亲节点存在),X的祖父节点为G(如果X的祖父节点存在)

  每一旋转步骤都是下列三种情况之一:

  第一种情况:如果P是树根,则旋转连接X和P的边(这种情况是最后一步)。(如果X是左儿子就右旋,如果X是右儿子就左旋)。

  第二种情况:如果P不是树根,而且X和P本身都是左孩子或者都是右孩子,则先旋转连接P和G的边,然后再旋转连接X和P的边。

  第三种情况:如果P不是树根,而且X是左孩子,P是右孩子,或者相反,则先旋转连接X和P的边,再旋转连接X和新的P的边。

 

 

posted @ 2013-08-26 21:18  yongren1zu  阅读(179)  评论(0编辑  收藏  举报