SPLAY树
SPLAY树(伸展树)1985年美国学者Daniel Sleator和Robert Tarjan提出Splay树,其能保证运算的摊还代价是\(O(\lg{n})\),但不保证每次运算的实际代价都是\(O(\lg{n})\),所以其并非严格意义上的自平衡二叉树,但这也使其有更简单的定义和运算步骤。这里直接给出Splay树的定义,首先其运算功能和前文的BST一致,且运算开始前只需保证二叉树是BST,但运算步骤是被具体规定的,它们都必须基于伸展运算\(splay(x)\),其功能是通过多次单旋转使\(x\)成为树根。下面给出Splay树运算的步骤,其包括\(splay(x)\)的步骤:
1) \(splay(x)\):开始迭代过程,每轮迭代的步骤如下:
1.1) \(x\)无父亲:退出迭代;
1.2) \(x\)有父亲无祖父:对\(x\)的父亲执行1次单旋转使\(x\)取代其父亲的位置(见上图第1张)。退出迭代;… 阅读全文