zoukankan      html  css  js  c++  java
  • 关于红黑树旋转算法的一点说明

    《算法导论》(Thomas H.Cormen等著,潘金贵等译,第二版)书166页的红黑树旋转算法

    程序虽然很小,但有一些惯性思维,比如“=”的误认,很难看懂。现对伪代码说明如下:

    LEFT-ROTATE(T, x)  
    01  y ← right[x]            // x的右孩子为y是左旋的前提,这个条件成立,才会有下面的操作
    02  right[x] ← left[y]      // 修改x的right域,将其指向β
    03  p[left[y]] ← x          // 让β的父亲域指向x
    04  p[y] ← p[x]             // 让y的父亲域指向x的父亲
    05  if p[x] = nil[T]       //中间“=”代表程序中的“==”
    06  then root[T] ← y                 // 情况1:如果 “x的父亲” 是空节点,则将y设为根节点(即旋转前x是根结点)
    07  else if x = left[p[x]]  //中间“=”代表程序中的“==”
    08            then left[p[x]] ← y    // 情况2:如果 x是它父节点的左孩子,则将“x的父节点”的left域指向y
    09            else right[p[x]] ← y   // 情况3:(x是它父节点的右孩子) 将“x的父节点”right域指向y
    10  left[y] ← x             // 将y的left域设为x
    11  p[x] ← y                // 将 “x的父节点域” 设为 y


  • 相关阅读:
    java基础 -- 经典排序
    java 基础 ----- Arrays 工具类
    java基础 ---- 二维数组
    java基础 ---- 一维数组
    java基础 ---- 练习for循环
    AI 偏微分方程
    AI 反向传播神经网络
    AI 判别式模型和生成式模型
    AI 隐含狄利克雷分布
    AI 朴素贝叶斯分类
  • 原文地址:https://www.cnblogs.com/guocm/p/3506265.html
Copyright © 2011-2022 走看看