Splay平衡树

一、二叉搜索树(\(BST\))

由于\(Splay\)就是一种\(BST\),所以先来说说\(BST\)是什么。

定义:

\(BST\)其实就是一棵树,不一定为满二叉树, 但必定遵循左子树 < 根 < 右子树

操作

基础操作都十分简单:

  • 添加元素:每次与当前所在节点比较大小,小就往左走,大就往右走,直到找到一个空位就停下来。
  • 查询元素:和根比较大小,小就往左,大就往右,找到为止。
  • 删除元素:先查询,找到之后总节点数-1,然后调整(把子树调整到当前位置,再按照左子树 < 根 < 右子树的规则调整)即可

二、\(Splay\)

开启话痨模式
不知道\(Splay\)是啥,,你也要知道平衡树是啥。
平衡树是一个神奇的数据结构,
对于任意一个节点,左儿子的值比它小,右儿子的值比它大。
并且任意一棵子树单独拎出来也是一棵平衡树。
就像这样:

Splay平衡树

上面这个丑陋的东西就是一棵平衡树,他现在很平衡,是一棵满二叉树,高度正好是\(logn\)。
但是……
如果这个丑陋的东西极端一点,他就会变成这样:
Splay平衡树

现在看起来,这个东西一点都不平衡……
二叉树退化成了一条链
如果要查询的话,,,最坏情况下就变成了\(O(n)\)
这就很尴尬了。
于是有个大佬叫做\(Tarjan\)发明了\(Splay\)来保持平衡树平衡的外形……
\(Tarjan\)大佬的基本思路就是

上一篇:搬家第一天-1.WinccV7.3 使用VBS判断数据库Mydatabase下是否存在数据表Mytable


下一篇:C++二叉搜索树