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


  • 相关阅读:
    软工实践个人总结
    Beta版本演示
    Beta 5
    Beta 4
    Beta 3
    Beta 2
    2020系统综合实践 期末大作业 02组
    2020系统综合实践 第7次实践作业 2组
    2020系统综合实践 第6次实践作业 2组
    2020系统综合实践 第5次实践作业
  • 原文地址:https://www.cnblogs.com/guocm/p/3506265.html
Copyright © 2011-2022 走看看