CLRSでは、著者は以下の疑似コードによって赤黒ツリーの回転操作を紹介します。

LEFT-ROTATE(T, x)
    y = x.right        # Line 1
    x.right = y.left   # Line 2
    if y.left ≠ T.nil  # Line 3
        y.left.p = x   # Line 4
    y.p = x.p
    if x.p == T.nil
        T.root = y
    elseif x == x.p.left
        x.p.left = y
    else x.p.right = y
    y.left = x
    x.p = y
ここで、属性.left、.right、.pは、その左、右の子、およびその親に対応します。Tはツリーです。
私の主な質問は3行目と4行目です。
3行目のif条件が必要なのはなぜですか?この本には、NILは実際には赤黒の木の葉であると書かれているので、NILには親ポインターもあると思います。これらのコードはLine 3がなくても機能するはずです。
Line 1とLine 2では、Line 4を次のように書くことができ
x.right.p = xますか?それらが実際に同じである場合、著者がそれを次のように書くことを選択した理由はありy.left.p = xますか?
私の本能はとx.right.p = xは異なりy.left.p = xます。しかし、これについての良い説明はありません。私はポインタの定義をチェックアウトしましたが、たくさんググった後でそれはまだかなり混乱しています...
