private void eliminar(int id, Nodochofer A) {
   if (raiz.izquierda != null || raiz.derecha != null) {
     if (A != null) {
       if (A.clave < id) {
         eliminar(id, A.derecha);
         if (nuevaRaiz != null && nuevaRaiz.hashCode() != raiz.hashCode()) {
           A.izquierda = nuevaRaiz;
           nuevaRaiz = null;
         }
         if (borrado == true) {
           A.equilibrio--;
           rotarBorrado(A);
           borrado = (A.equilibrio == 0);
         }
         if (apuntado == true) {
           A.derecha = Aux;
           apuntado = false;
         }
       } else {
         if (A.clave > id) {
           eliminar(id, A.izquierda);
           if (nuevaRaiz != null && nuevaRaiz.hashCode() != raiz.hashCode()) {
             A.izquierda = nuevaRaiz;
             nuevaRaiz = null;
           }
           if (borrado == true) {
             A.equilibrio++;
             rotarBorrado(A);
             borrado = (A.equilibrio == 0);
           }
           if (apuntado == true) {
             A.izquierda = Aux;
             apuntado = false;
           }
         } else {
           if (A.clave == id) {
             borrado = true;
             apuntado = true;
             if (A.izquierda == null) {
               Aux = A.derecha;
             } else {
               if (A.derecha == null) {
                 Aux = A.izquierda;
               } else {
                 Aux = Reemplazar(A, A, true);
               }
             }
           }
         }
       }
     }
   } else {
     raiz = null;
   }
 }
  private boolean rotarBorrado(Nodochofer A) {
    if (A.equilibrio < -1) {
      if (A.izquierda.equilibrio > 0) {
        if (raiz.hashCode() != A.hashCode()) {
          ID(A);
          borrado = false;
          return true;
        } else {
          raiz = ID(A);
          borrado = false;
          return true;
        }

      } else {
        if (raiz.hashCode() != A.hashCode()) {
          II(A);
          borrado = false;
          return true;
        } else {
          raiz = II(A);
          borrado = false;
          return true;
        }
      }
    } else {
      if (A.equilibrio > 1) {
        if (A.derecha.equilibrio < 0) {
          if (raiz.hashCode() != A.hashCode()) {
            DI(A);
            borrado = false;
            return true;
          } else {
            raiz = DI(A);
            borrado = false;
            return true;
          }
        } else {
          if (raiz.hashCode() != A.hashCode()) {
            DD(A);
            borrado = false;
            return true;
          } else {
            raiz = DD(A);
            aumento = false;
            borrado = false;
            return true;
          }
        }
      }
    }
    return false;
  }
 private Nodochofer DD(Nodochofer A) {
   rotacion = true;
   Nodochofer aux = A.derecha.izquierda;
   A.derecha.izquierda = A;
   if (aux == null) {
     if (A.izquierda != null) A.derecha.equilibrio--;
     if (A.izquierda == null) A.derecha.equilibrio = 0;
   } else {
     if (A.izquierda != null) A.derecha.equilibrio = 0;
     if (A.izquierda == null) A.derecha.equilibrio--;
   }
   Nodochofer aux2 = A.derecha;
   A.derecha = aux;
   if (aux == null) {
     if (A.izquierda != null) A.equilibrio--;
     if (A.izquierda == null) A.equilibrio = 0;
   } else {
     if (A.izquierda != null) A.equilibrio = 0;
     if (A.izquierda == null) A.equilibrio++;
   }
   nuevaRaiz = aux2;
   aux2.rotacion = 11;
   return aux2;
 }
  private Nodochofer insertar(
      int n, String correo, String apellido, String contraseña, Nodochofer A) {
    if (A == null) {
      A = new Nodochofer();
      if (raiz == null) {
        raiz = A;
      }
      A.setclave(n);
      A.setequilibrio(0);
      A.setnombre(correo);
      A.setcontraseña(contraseña);
      A.setapellido(apellido);
      return A;
    } else {
      if (n < A.clave) {
        if (A.izquierda == null) {
          A.equilibrio--;
          aumento = (A.equilibrio != 0);
          A.izquierda = insertar(n, correo, apellido, contraseña, A.izquierda);
        } else {
          insertar(n, correo, apellido, contraseña, A.izquierda);
          if (aumento) {
            if (rotacion != true) {
              A.equilibrio--;
              aumento = (A.equilibrio != 0);
            }
          }
          if (nuevaRaiz != null && nuevaRaiz.hashCode() != raiz.hashCode()) {
            A.izquierda = nuevaRaiz;
            nuevaRaiz = null;
            rotacion = false;
          }
          if (A.equilibrio < -1) {
            if (A.izquierda.equilibrio > 0) {
              if (raiz.hashCode() != A.hashCode()) {
                ID(A);
                aumento = false;
                return null;
              } else {
                raiz = ID(A);
                aumento = false;
                rotacion = false;
                return null;
              }

            } else {
              if (raiz.hashCode() != A.hashCode()) {
                II(A);
                aumento = false;
                return null;
              } else {
                raiz = II(A);
                aumento = false;
                rotacion = false;
                return null;
              }
            }
          }
        }
      } else {
        if (A.derecha == null) {
          A.equilibrio++;
          aumento = (A.equilibrio != 0);
          A.derecha = insertar(n, correo, apellido, contraseña, A.derecha);
        } else {
          insertar(n, correo, apellido, contraseña, A.derecha);
          if (aumento) {
            if (rotacion != true) {
              A.equilibrio++;
              aumento = (A.equilibrio != 0);
            }
          }
          if (nuevaRaiz != null && nuevaRaiz.hashCode() != raiz.hashCode()) {
            A.derecha = nuevaRaiz;
            nuevaRaiz = null;
            rotacion = false;
          }
          if (A.equilibrio > 1) {
            if (A.derecha.equilibrio < 0) {
              if (raiz.hashCode() != A.hashCode()) {
                DI(A);
                aumento = false;
                return null;
              } else {
                raiz = DI(A);
                aumento = false;
                rotacion = false;
                return null;
              }
            } else {
              if (raiz.hashCode() != A.hashCode()) {
                DD(A);
                aumento = false;
                return null;
              } else {
                raiz = DD(A);
                aumento = false;
                rotacion = false;
                return null;
              }
            }
          }
        }
      }
    }
    return null;
  }
 private Nodochofer Reemplazar(Nodochofer A, Nodochofer buscado, boolean estado) {
   if (estado == true) {
     Reemplazar(A.izquierda, buscado, false);
     if (nuevaRaiz != null && nuevaRaiz.hashCode() != raiz.hashCode()) {
       A.izquierda = nuevaRaiz;
       nuevaRaiz = null;
     }
     if (buscado.hashCode() == raiz.hashCode()) {
       raiz = Aux2;
     }
     if (Aux2.hashCode() != buscado.izquierda.hashCode()) {
       Aux2.izquierda = buscado.izquierda;
       buscado.izquierda = null;
     } else {
       buscado.izquierda = null;
     }
     Aux2.derecha = buscado.derecha;
     buscado.derecha = null;
     if (borrado == true) {
       Aux2.equilibrio++;
       rotarBorrado(Aux2);
       borrado = (Aux2.equilibrio == 0);
     }
   } else {
     if (A.derecha == null) {
       Aux2 = A;
       borrado = true;
       apuntado2 = true;
     } else {
       Reemplazar(A.derecha, buscado, estado);
       if (nuevaRaiz != null && nuevaRaiz.hashCode() != raiz.hashCode()) {
         A.derecha = nuevaRaiz;
         nuevaRaiz = null;
       }
       if (apuntado2 == true) {
         A.derecha = Aux2.izquierda;
         apuntado2 = false;
       }
       if (borrado == true) {
         A.equilibrio--;
         rotarBorrado(A);
         borrado = (A.equilibrio == 0);
       }
     }
   }
   return Aux2;
 }
 private Nodochofer DI(Nodochofer A) {
   A.derecha = II(A.derecha);
   return DD(A);
 }
 private Nodochofer ID(Nodochofer A) {
   A.izquierda = DD(A.izquierda);
   return II(A);
 }