二叉树之伸展树(Splay Tree)

普通二叉查找树的局限

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

二叉伸展树

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

伸展树维护过程

我将其分为六种情况:

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

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值