Пример #1
0
 public static Node <T> Balance(Node <T> n)
 {
     n.FixHeight();
     if (n.BalanceFactor() == -2)
     {
         if (n.Right.BalanceFactor() > 0)
         {
             n.Right = RotateRight(n.Right);
         }
         return(RotateLeft(n));
     }
     if (n.BalanceFactor() == 2)
     {
         if (n.Left.BalanceFactor() < 0)
         {
             n.Left = RotateLeft(n.Left);
         }
         return(RotateRight(n));
     }
     return(n);
 }
Пример #2
0
 private static Node DoBalance(Node node)
 {
     node.FixHeight();
     if (node.BalanceFactor() == 2)
     {
         if (node.Right.BalanceFactor() < 0)
         {
             node.Right = node.Right.RightRotate();
         }
         return(node.LeftRotate());
     }
     if (node.BalanceFactor() == -2)
     {
         if (node.Left.BalanceFactor() > 0)
         {
             node.Left = node.Left.LeftRotate();
         }
         return(node.RightRotate());
     }
     return(node);
 }