• 红黑树-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)时间内执行的。旋转只有指针被改变;而节点中所有其他域都保持不变。

        

  • 相关阅读:
    下载文件c#
    系统蓝屏重起:如何修改设置,记录系统蓝屏重起的错误
    Repeater中的行数
    2010617 重装系统遇到的问题
    ajax 修改select的值 返回的值中有逗号
    GPS数据接收 串口调试感受
    Nios II实用之音频控制
    【笔记】VB控件MSComm功能介绍
    【摘】程序员版同桌的你
    AJAX Control Toolkit ——DragPanelExtender(拖拽面板)
  • 原文地址:https://www.cnblogs.com/weiliuyby/p/8438443.html
Copyright © 2020-2023  润新知