// Función para Colorear los nodos public void colorear(Graphics grafo, Font fuente, Brush Relleno, Brush RellenoFuente, Pen Lapiz, NodoArbol Raiz, bool post, bool inor, bool preor) { Brush entorno = Brushes.Red; if (inor == true) { if (Raiz != null) { colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, post, inor, preor); Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz); Thread.Sleep(1000); // pausar la ejecución 1000 milisegundos Raiz.colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz); colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, post, inor, preor); } } else if (preor == true) { if (Raiz != null) { Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz); Thread.Sleep(1000);// pausar la ejecución 1000 milisegundos Raiz.colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz); colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, post, inor, preor); colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, post, inor, preor); } } else if (post == true) { if (Raiz != null) { colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, post, inor, preor); colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, post, inor, preor); Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz); Thread.Sleep(1000); // pausar la ejecución 1000 milisegundos Raiz.colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz); } } }
public ArbolBinario(NodoArbol nueva_raiz) { Raiz = nueva_raiz; }
public ArbolBinario() { aux = new NodoArbol(); }
//Función para eliminar un nodo de un árbol binario public void Eliminar(int x, ref NodoArbol t) { if (t != null) //si la raíz es distinta de null { if (x < t.info) //si el valor a eliminar es menor que la raíz { Eliminar(x, ref t.Izquierdo); } else { if (x > t.info)//si el valor a eliminar es mayor que la raíz { Eliminar(x, ref t.Derecho); } else { NodoArbol NodoEliminar = t; //se ubica el nodo a eliminar //se verifica si tiene hijo derecho if (NodoEliminar.Derecho == null) { t = NodoEliminar.Izquierdo; } else { //se verifica si tiene hijo izq if (NodoEliminar.Izquierdo == null) { t = NodoEliminar.Derecho; } else { if (Alturas(t.Izquierdo) - Alturas(t.Derecho) > 0)//Para verificar que hijo pasa a ser nueva raíz del subárbol { NodoArbol AuxiliarNodo = null; NodoArbol Auxiliar = t.Izquierdo; bool bandera = false; while (Auxiliar.Derecho != null) { AuxiliarNodo = Auxiliar; Auxiliar = Auxiliar.Derecho; bandera = true; }// se crea nodo temporal 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 el Arbol", "Error de eliminación"); } } //Final de la función elimina
public void encontrado(NodoArbol t) { Rectangle rec = new Rectangle(t.CoordenadaX, t.CoordenadaY, 40, 40); }
//Verificar altura del árbol private static int Alturas(NodoArbol t) { return(t == null? -1 : t.altura); }