伸展树及相关操作

伸展树是一种二叉排序树,通过伸展旋转优化查找效率,确保频繁访问的关键字靠近根部。文章介绍了伸展树的旋转类型(单旋转、一字形旋转、之字形旋转)及其简化,伸展操作以及C/C++实现,旨在帮助读者理解并掌握伸展树的原理和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

伸展树

简要提点

  • 伸展树(Splay Tree)是一种二叉排序树,能在O(log n)内完成插入、查找和删除操作。
  • 伸展树的基本操作都和伸展有关:当带有关键字X的节点被插入时,需要对树进行一系列的伸展旋转使得关键字X的节点成为新的根节点。当查找一个关键字X时,也同样对树进行伸展旋转使得带有关键字X的节点成为根节点。这样下次再查找X时,只需O(1)的时间。
  • 伸展树的数据结构使得访问频繁的关键字排在靠近根的位置,减少了频繁关键字的查找时间。

伸展树的旋转

  • 三种旋转情况:单旋转、一字形旋转和之字形旋转,每种旋转都分左右两个方向。
  • 为了简化旋转操作,假设当前伸展树根节点X,左边有个空节点L节点(旋转过程作为子树的根,自顶向下迭代过程中子树中存放小于X的节点),同样右边有个空节点R节点(旋转过程作为子树的根,自顶向下迭代过程中子树中存放大于X的节点)当然也可以不借助L和R直接在树中自顶向下依次旋转调整。

单旋转

  • 如下图假设(要查找的)目标节点为YY节点,则需要进行一次单旋转(左),将 Y 调整为中间树的新根。
    这里写图片描述

一字形旋转

  • 类似于AVL树的单旋转如下图假设(要查找的)目标节点为ZZ节点,则需要进行一次一字形旋转(左),将 Z 调整为中间树的新根。
    这里写图片描述
SplayTree SingleRotateWithLeft(SplayTree Sp)    // 一字形旋转(左)类似AVL单左旋
{
    SplayNode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值