伸展树

概念

伸展树是一种二叉查找树,它能在O(logn)内完成插入、查找和删除操作。
伸展树是一种自调整形式的二叉查找树,它会沿着从某个节点到树根之间的路径,通过一系列的旋转把这个节点搬移到树根去。
它的优势在于不需要记录用于平衡树的冗余信息。

优点

  • 可靠的性能-它的平均效率不输于其他平衡树
  • 存储所需的内存少-伸展树无需记录额外的什么值来维护树的信息,相对于其他平衡树,内存占用要小

缺点

伸展树最明显的缺点是它有可能会变成一条链表。这种情况可能发生在以非降顺序访问n个元素之后。然而均摊的最坏情况是对数级的O(logn)

基本操作

伸展树主要有三种旋转操作,分别为单旋转,一字形旋转和之字形旋转。为了便于解释,我们假设当前被访问节点为X,X的父亲节点为Y(如果X的父亲节点存在),X的祖父节点为Z(如果X的祖父节点存在)。

  • 单旋转
    节点X的父节点Y是根节点。这时,如果X是Y的左孩子,我们进行一次右旋操作;如果X是Y的右孩子,则我们进行一次左旋操作。经过旋转,X成为二叉查找树T的根节点,调整结束。
单旋转
  • 一字型旋转
    节点X的父节点Y不是根节点,Y的父节点为Z,且X与Y同时是各自父节点的左孩子或者同时是各自父节点的右孩子。这时,我们进行一次左左旋转操作或者右右旋转操作。
一字型旋转
  • 之字形旋转
    节点X的父节点Y不是根节点,Y的父节点为Z,X与Y中一个是其父节点的左孩子而另一个是其父节点的右孩子。这时,我们进行一次左右旋转操作或者右左旋转操作。
之字形旋转
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 0.树0.1 一般树的定义0.2 二叉树的定义 1.查找树ADT 2.查找树的实现2.1 二叉查找树2.2 ...
    王侦阅读 12,062评论 0 3
  • 1、红黑树介绍 红黑树又称R-B Tree,全称是Red-Black Tree,它是一种特殊的二叉查找树,红黑树的...
    文哥的学习日记阅读 13,325评论 1 35
  • 基于树实现的数据结构,具有两个核心特征: 逻辑结构:数据元素之间具有层次关系; 数据运算:操作方法具有Log级的平...
    yhthu阅读 9,779评论 1 5
  • 伸展树的引入: 我们知道AVL树为了保持严格的平衡,所以在数据插入上会呈现过多的旋转,影响了插入和删除的性能。从访...
    大海孤了岛阅读 6,893评论 1 3
  • 页面中有多个选项卡,采用面向对象的方式实现. 代码简洁,有效减少代码冗余,便于后期维护 大家可以在这个基础上根据需...
    bob_play阅读 4,819评论 0 7