splay tree.java_伸展树--Java实现

前言前面的学习中,笔者就二叉树、二叉查找树、平衡二叉树进行了一些总结。此篇文章主要讨论伸展树。我们知道的是在二叉查找树上的基本操作(查找、插入)的时间复杂读与树的高度成正比的关系。对于一个含有N个结点的二叉查找树来说,这些操作的最坏运行情况为OlogN)。但是我们这知道在极端的情况下,会导致树退化为一个单支树,这导致了操作时间为O(N)。为了克服上面的情况,出现了一些二叉查找树的变形,例如上篇文章...
摘要由CSDN通过智能技术生成

前言

前面的学习中,笔者就二叉树、二叉查找树、平衡二叉树进行了一些总结。此篇文章主要

讨论伸展树。我们知道的是在二叉查找树上的基本操作(查找、插入)的时间复杂读与树的高度

成正比的关系。对于一个含有N个结点的二叉查找树来说,这些操作的最坏运行情况为OlogN)。

但是我们这知道在极端的情况下,会导致树退化为一个单支树,这导致了操作时间为O(N)。

为了克服上面的情况,出现了一些二叉查找树的变形,例如上篇文章的AVL树。以及接下来

要讨论的伸展树。

伸展树定义

伸展树是基于二叉查找树的,它不保证树一直是平衡的,但是各种操作的平均复杂读是

O(logN) 。

伸展树的设计是具体考虑到了局部性原理(刚被访问的内容下次可能还被访问,查找次数

多的内容可能下次还被访问),为了使整个的查询时间更小,查询频率高的那些结点应当处于

靠近树根的位置。

这样,一个比较好的解决方案就是:每次查找就结点之后对树进行重新构造。把查找的结

点搬移到树根的位置,以这种方式自调×××式的二叉查找树就是伸展树。

旋转操作

搞清楚了伸展树的定义,那么我们来看看是如何实现结点的搬移操作的,和AVL树一样同样

是通过旋转来操作的。具体如何旋转,我们分三种情况。单旋转、一字旋转和之字旋转。

这里我们假定访问的结点为A

单旋转

对于单旋转操作,我们先看一个实例,之后对其略做分析。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值