/// <summary> /// Metodo para insertar valores en el nodo y/o raiz /// </summary> /// <param name="dato">Valor a Insertar (int)</param> /// <param name="pNodo">Nodo en el que se va a insertar (Nodo)</param> /// <returns></returns> static public NodoArbol Insertar(Object dato, NodoArbol pNodo) { //Variable auxiliar NodoArbol temp = null; //Comprobacion en caso de pNodo null if (pNodo == null) { temp = new NodoArbol(dato); return(temp); } if (Recorridos.DetectaTipo(pNodo) != typeof(int)) { Console.WriteLine("El arbol no es de tipo entero"); return(null); } ///Determina a que lado se ira el dato ingresado //En caso de ser menor al nodo if (Convert.ToInt32(dato) <= Convert.ToInt32(pNodo.Valor)) { pNodo.Izq = Insertar(dato, pNodo.Izq); } //En caso de ser mayor al nodo if (Convert.ToInt32(dato) > Convert.ToInt32(pNodo.Valor)) { pNodo.Der = Insertar(dato, pNodo.Der); } return(pNodo); }
/// <summary> /// Metodo para borrar nodo /// </summary> /// <param name="dato">Dato a borrar (int)</param> /// <param name="nodo">Nodo en el que se va buscar</param> /// <returns>El "arbol" resultante.</returns> static public NodoArbol BorrarNodo(int dato, NodoArbol nodo) { if (Recorridos.DetectaTipo(nodo) != typeof(int)) { Console.WriteLine("El arbol no es de tipo entero"); } return(null); //Recorrido para comprobar que exista el dato if (!Recorridos.Resultado_Buscar(nodo, dato)) { Console.WriteLine($"El dato {dato}, no existe dentro del nodo"); return(nodo); } //En caso de ser null if (nodo == null) { return(nodo); } //En caso de ser menor if (dato < Convert.ToInt32(nodo.Valor)) { nodo.Izq = BorrarNodo(dato, nodo.Izq); } //En caso de ser mayor if (dato > Convert.ToInt32(nodo.Valor)) { nodo.Der = BorrarNodo(dato, nodo.Der); } //Sin hijos if (nodo.Izq == null && nodo.Der == null) { return(nodo = null); } //Un hijo if (nodo.Izq == null) { var padre = BuscarPadre(dato, nodo); padre.Der = nodo.Der; return(nodo); } //Dos hijos else { var min = EncuentraMin(nodo.Der); nodo.Valor = min; nodo.Der = BorrarNodo(min, nodo.Der); } return(nodo); }
/// <summary> /// De /// </summary> /// <param name="Arbol"></param> /// <param name="valor"></param> /// <returns>Boolena para comprobación interna</returns> public static bool Resultado_Buscar(NodoArbol Arbol, int valor) { if (Recorridos.Buscar(Arbol, valor) == null) { return(false); } else { return(true); } }