当前位置: 代码迷 >> 综合 >> 二叉树之伸展树(Splay Tree)
  详细解决方案

二叉树之伸展树(Splay Tree)

热度:49   发布时间:2023-11-22 07:51:53.0

普通二叉查找树的局限

二叉查找树(Binary Search Tree)有着许多应用,但是二叉查找树的基本操作时间与树的高度成正比,如果一棵树为n个结点的线性链表,则查找的时间复杂度会达到O(N).
由此产生了AVL树等改进版的二叉查找树,以维护查找的时间复杂度一直保持O(log N).

二叉伸展树

二叉伸展树也是一种改进的二叉搜索树,但与AVL不同,它不用每一步都保持二叉树的平衡,而是每次查找到节点之后,对树进行重构(把被查找到的节点换到根节点的位置),这种二叉树的查找时间复杂度也可以一直保持O(log N).
个人认为,伸展树比AVL好理解、代码上也好实现一点.
伸展树依据局部性原理:刚被查找的内容很有可能再次被访问(说实话,俺是没搞懂这个原理啥意思)

伸展树维护过程

我将其分为六种情况:

  1. 左型(右旋一次)
    请添加图片描述

  2. 右型(左旋一次)
    请添加图片描述

  3. 左左型(右旋两次)
    请添加图片描述

  4. 右右型(左旋两次)
    请添加图片描述

  5. 右左型(先右旋,再左旋)
    请添加图片描述

  6. 左右型(先左旋,再右旋)
    请添加图片描述

  相关解决方案