红黑树之 原理和算法详细介绍


左旋伪代码

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

对x进行左旋,意味着"将x变成一个左节点"。



X=40 Y=60

将 “y的左孩子” 设为 “x的右孩子”,即 将β设为x的右孩子

将 “x” 设为 “y的左孩子的父亲”,即 将β的父亲设为x

这样调整成了X的右孩子为50,而50发父亲为40

将 “x的父亲” 设为 “y的父亲” X的父亲是80设置成Y(60)的父亲

情况2:如果 x是它父节点的左孩子,则将y设为“x的父节点的左孩子”  即把60设置成80的左孩子

   将 “x” 设为 “y的左孩子”   将 “x的父节点” 设为 “y”  设置60为40的父亲,40为60的左孩子

完成左旋。

我们处理红黑树的核心思想:将红色的节点移到根节点;然后,将根节点设为黑色。
  而我们处理问题的时候,需要从下至上(由叶到根)方向进行处理;必须先解决“孩子”的问题,再解决“父亲”的问题;

http://www.cnblogs.com/skywang12345/p/3245399.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值