示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
 /// <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);
     }
 }