zoukankan      html  css  js  c++  java
  • 红黑树-RBT(二、基本操作之左旋)

    一、左旋

      1、当在含有n个关键字的红黑树上运行时,TREE-INSERT和TREE-DELETE操作对树作了修改,结果可能违反(一、红黑树--》2、定义)中给出的红黑树的性质,为了保持这些性质,就要改变树中的某些节点的颜色以及指针结构。

        对x进行左旋,意味着"将x变成一个左节点"。左旋以x到y之间的链为“支轴”进行。它使y成为该子树新的根,x成为y的左孩子,y的左孩子成为x的右孩子。

      2、伪代码:在LEFT-ROTATE得伪代码中,假设right[x]!=nil[T]  

     1 LEFT-ROTATE(T, x)  
     2 y ← right[x]            // 前提:这里假设x的右孩子为y。下面开始正式操作
     3 right[x] ← left[y]      // 将 “y的左孩子” 设为 “x的右孩子”,即 将β设为x的右孩子
     4 p[left[y]] ← x          // 将 “x” 设为 “y的左孩子的父亲”,即 将β的父亲设为x
     5 p[y] ← p[x]             // 将 “x的父亲” 设为 “y的父亲”
     6 if p[x] = nil[T]       
     7 then root[T] ← y                 // 情况1:如果 “x的父亲” 是空节点,则将y设为根节点
     8 else if x = left[p[x]]  
     9            then left[p[x]] ← y    // 情况2:如果 x是它父节点的左孩子,则将y设为“x的父节点的左孩子”
    10            else right[p[x]] ← y   // 情况3:(x是它父节点的右孩子) 将y设为“x的父节点的右孩子”
    11 left[y] ← x             // 将 “x” 设为 “y的左孩子”
    12 p[x] ← y                // 将 “x的父节点” 设为 “y”

      3、Right-ROTATE与LEFT-ROTATE的程序是对称的。他们都是在O(1)时间内执行的。旋转只有指针被改变;而节点中所有其他域都保持不变。

        

  • 相关阅读:
    cocos2d-x系列笔记技巧篇(2)---关于CREATE_FUNC宏的用法
    Cocos2d-x开源、跨平台的游戏引擎
    Asp.Net Core 文件上传处理
    Asp.Net Core获取当前上下文对象
    Asp.Net Core 视图整理(一)
    SVG渲染顺序及z轴显示问题(zIndex)
    JavaScript Screen对象
    Javascript 对象(object)合并
    SVG.Js事件示例,简单绑定拖动操作
    SVG 文字居中整理
  • 原文地址:https://www.cnblogs.com/weiliuyby/p/8438443.html
Copyright © 2011-2022 走看看