public void Eliminar(int x, ref NodoArbol t) { if (t != null) { if (x < t.info) { Eliminar(x, ref t.Izquierdo); } else { if (x > t.info) { Eliminar(x, ref t.Derecho); } else { NodoArbol 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) { NodoArbol AuxiliarNodo = null; NodoArbol 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) { NodoArbol AuxiliarNodo = null; NodoArbol 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) { NodoArbol AuxiliarNodo = null; NodoArbol 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"); } }
private static int Alturas(NodoArbol t) { return(t == null ? -1 : t.altura); }
public ArbolBinario(NodoArbol nueva_raiz) { Raiz = nueva_raiz; }
public NodoArbol RaizArbol() { NodoArbol t = new NodoArbol(); return(Raiz); }
public ArbolBinario() { aux = new NodoArbol(); }