左旋伪代码
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