예제 #1
0
 public Node MoveLeft()
 {
     FlipColors();
     if (IsRed(right.left))
     {
         right = right.RotateRight();
         var n = RotateLeft();
         return(n.FlipColors());
     }
     return(this);
 }
예제 #2
0
 private Node Balance(Node n)
 {
     if (IsRed(n.right))
     {
         n = n.RotateLeft();
     }
     if (IsRed(n.left) && IsRed(n.left.left))
     {
         n = n.RotateRight();
     }
     if (IsRed(n.left) && IsRed(n.right))
     {
         n.FlipColors();
     }
     n.size = Size(n.left) + Size(n.right) + 1;
     return(n);
 }