zoukankan      html  css  js  c++  java
  • 008-数据结构-树形结构-二叉查找树-伸展树

    一、概述

      伸展树(Splay Tree)是特殊的二叉查找树。

      它的特殊是指,它除了本身是棵二叉查找树之外,它还具备一个特点: 当某个节点被访问时,伸展树会通过旋转使该节点成为树根。这样做的好处是,下次要访问该节点时,能够迅速的访问到该节点。

      AVL树为了保持严格的平衡,所以在数据插入上会呈现过多的旋转,影响了插入和删除的性能。从访问量上,我们知道许多应用场景都有一个“二八原则“,也就是说80%的人只会用到20%的数据,比如说我们的用的输入法,平常打的字也就那么多,或许还没有20%呢。

    二、详细说明

    旋转是伸展树中需要重点关注的

    将"键值为key的节点"旋转为根节点,并返回根节点。它的处理情况共包括:
    (a):伸展树中存在"键值为key的节点"。
            将"键值为key的节点"旋转为根节点。
    (b):伸展树中不存在"键值为key的节点",并且key < tree->key。
            b-1) "键值为key的节点"的前驱节点存在的话,将"键值为key的节点"的前驱节点旋转为根节点。
            b-2) "键值为key的节点"的前驱节点存在的话,则意味着,key比树中任何键值都小,那么此时,将最小节点旋转为根节点。
    (c):伸展树中不存在"键值为key的节点",并且key > tree->key。
            c-1) "键值为key的节点"的后继节点存在的话,将"键值为key的节点"的后继节点旋转为根节点。
            c-2) "键值为key的节点"的后继节点不存在的话,则意味着,key比树中任何键值都大,那么此时,将最大节点旋转为根节点。 

    2.1、说明

    在下面的伸展树中查找10,,共包括"右旋" --> "右链接" --> "组合"这3步。

      

    01, 右旋
    对应代码中的"rotate right"部分

      

    02, 右链接
    对应代码中的"link right"部分

      

    03. 组合
    对应代码中的"assemble"部分

      

    代码地址:地址 中的data-004-tree中 SplayTree

    2.2、示例

      

  • 相关阅读:
    获得微软最具影响力开发者(GDI)
    推荐一个制作卡通头像的网站(超强)
    李煜词全集
    15款语言学习2.0网络服务
    SNS社么时候回归社交? !!
    公司附近雪景
    Powershell实践之Discuz!NT自动打包发布
    使用 Office Live 时 Install Office Live Update 1.2出错的解决办法
    修改linux swap空间的swappiness,降低对硬盘的缓存
    TFS "TF30063: 您没有权限访问 MicrosoftIIS/7.0."
  • 原文地址:https://www.cnblogs.com/bjlhx/p/10875266.html
Copyright © 2011-2022 走看看