Ejemplo n.º 1
0
 public void Eliminar(int x, ref Nodo_Arbol t)
 {
     if (t != null)
     {
         if (x < t.info)
         {
             Eliminar(x, ref t.Izquierdo);
         }
         else
         {
             if (x > t.info)
             {
                 Eliminar(x, ref t.Derecho);
             }
             else
             {
                 Nodo_Arbol NodoEliminar = t;
                 if (NodoEliminar.Derecho == null)
                 {
                     t = NodoEliminar.Izquierdo;
                 }
                 else
                 {
                     if (NodoEliminar.Izquierdo == null)
                     {
                         t = NodoEliminar.Derecho;
                     }
                     else
                     {
                         if ((Alturas(t.Izquierdo) - Alturas(t.Derecho)) > 0)
                         {
                             Nodo_Arbol AuxiliarNodo = null;
                             Nodo_Arbol Auxiliar     = t.Izquierdo;
                             bool       Bandera      = false;
                             while (Auxiliar.Derecho != null)
                             {
                                 AuxiliarNodo = Auxiliar;
                                 Auxiliar     = Auxiliar.Derecho;
                                 Bandera      = true;
                             }
                             t.info       = Auxiliar.info;
                             NodoEliminar = Auxiliar;
                             if (Bandera == true)
                             {
                                 AuxiliarNodo.Derecho = Auxiliar.Izquierdo;
                             }
                             else
                             {
                                 t.Izquierdo = Auxiliar.Izquierdo;
                             }
                         }
                         else
                         {
                             if ((Alturas(t.Derecho) - Alturas(t.Izquierdo)) > 0)
                             {
                                 Nodo_Arbol AuxiliarNodo = null;
                                 Nodo_Arbol Auxiliar     = t.Derecho;
                                 bool       Bandera      = false;
                                 while (Auxiliar.Izquierdo != null)
                                 {
                                     AuxiliarNodo = Auxiliar;
                                     Auxiliar     = Auxiliar.Izquierdo;
                                     Bandera      = true;
                                 }
                                 t.info       = Auxiliar.info;
                                 NodoEliminar = Auxiliar;
                                 if (Bandera == true)
                                 {
                                     AuxiliarNodo.Izquierdo = Auxiliar.Derecho;
                                 }
                                 else
                                 {
                                     t.Derecho = Auxiliar.Derecho;
                                 }
                             }
                             else
                             {
                                 if (Alturas(t.Derecho) - Alturas(t.Izquierdo) == 0)
                                 {
                                     Nodo_Arbol AuxiliarNodo = null;
                                     Nodo_Arbol Auxiliar     = t.Izquierdo;
                                     bool       Bandera      = false;
                                     while (Auxiliar.Derecho != null)
                                     {
                                         AuxiliarNodo = Auxiliar;
                                         Auxiliar     = Auxiliar.Derecho;
                                         Bandera      = true;
                                     }
                                     t.info       = Auxiliar.info;
                                     NodoEliminar = Auxiliar;
                                     if (Bandera == true)
                                     {
                                         AuxiliarNodo.Derecho = Auxiliar.Izquierdo;
                                     }
                                     else
                                     {
                                         t.Izquierdo = Auxiliar.Izquierdo;
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     else
     {
         MessageBox.Show("Nodo NO Existente en el Árbol", "Error de Eliminación");
     }
 }
Ejemplo n.º 2
0
 private static int Alturas(Nodo_Arbol t)
 {
     return(t == null ? -1 : t.altura);
 }