public Nodo(int ndato, Nodo nDerecho, Nodo nIzquierdo, Nodo nPadre) { dato = ndato; Izquierdo = nIzquierdo; Derecho = nDerecho; Padre = nPadre; altura = 0; }
public Nodo buscar(int dato, Nodo t) { Nodo aux = t; while (aux != null) { if (dato == aux.dato) { return aux; } if (dato < aux.dato) { aux = aux.Izquierdo; } else { aux = aux.Derecho; } } return null; }
public Nodo Insertar(int nDato, Nodo t, int nNivel) { if (t == null) { t = new Nodo(nDato, null, null, null); t.nivel = nNivel; } else if (nDato < t.dato) { nNivel++; t.Izquierdo = Insertar(nDato, t.Izquierdo, nNivel); } else if (nDato > t.dato) { nNivel++; t.Derecho = Insertar(nDato, t.Derecho, nNivel); } else { MessageBox.Show("Dato existente en el Árbol", "Error de ingreso"); } return t; }
private static int Alturas(Nodo t) { return t == null ? -1 : t.altura; }
public void Eliminar(int nDato, ref Nodo t) { if (t != null) { if (nDato < t.dato) { Eliminar(nDato, ref t.Izquierdo); } else { if (nDato > t.dato) { Eliminar(nDato, ref t.Derecho); } else { Nodo nodoAEliminar = t; // ya se ubico el nodo a eliminar if (nodoAEliminar.Derecho == null) { t = nodoAEliminar.Izquierdo; } else { if (nodoAEliminar.Izquierdo == null) { t = nodoAEliminar.Derecho; } else { if (Alturas(t.Izquierdo) - Alturas(t.Derecho) > 0) { // Para verificar que hijo pasa a ser una nueva raiz del subárbol Nodo AuxiliarNodo = null; Nodo Auxiliar = t.Izquierdo; bool Bandera = false; while (Auxiliar.Derecho != null) { AuxiliarNodo = Auxiliar; Auxiliar = AuxiliarNodo.Derecho; Bandera = true; } t.dato = Auxiliar.dato; nodoAEliminar = Auxiliar; if (Bandera == true) { AuxiliarNodo.Derecho = Auxiliar.Izquierdo; } else { t.Izquierdo = Auxiliar.Izquierdo; } } else { if (Alturas(t.Derecho) - Alturas(t.Izquierdo) > 0) { Nodo AuxiliarNodo = null; Nodo Auxiliar = t.Derecho; bool Bandera = true; while (Auxiliar.Izquierdo != null) { AuxiliarNodo = Auxiliar; Auxiliar = Auxiliar.Izquierdo; Bandera = true; } t.dato = Auxiliar.dato; nodoAEliminar = Auxiliar; if (Bandera == true) { AuxiliarNodo.Izquierdo = Auxiliar.Derecho; } else { t.Derecho = Auxiliar.Derecho; } } else { if (Alturas(t.Derecho) - Alturas(t.Izquierdo) == 0) { Nodo AuxiliarNodo = null; Nodo Auxiliar = t.Izquierdo; bool Bandera = false; while (Auxiliar.Derecho != null) { AuxiliarNodo = Auxiliar; Auxiliar = Auxiliar.Derecho; Bandera = true; } t.dato = Auxiliar.dato; nodoAEliminar = Auxiliar; if (Bandera == true) { AuxiliarNodo.Derecho = Auxiliar.Izquierdo; } else { t.Izquierdo = Auxiliar.Izquierdo; } } } } } } } } } else { MessageBox.Show("Nodo NO existe en el Árbol","Error de eliminación"); } }