关于红黑树旋转算法的一点说明
2014-01-05 20:56 guocm 阅读(292) 评论(0) 编辑 收藏 举报《算法导论》(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