/* ENLISTA LAS PÁGINAS PARA LUEGO PODER ENLAZARLAS. EN CADA PÁGINA SE METEN LOS DATOS DE SUS NODOS. */

        private String Enlazar(Pagina Actual, String Grafo)
        {
            if (Actual == null || Actual.isEmpty())
            {
                return(Grafo);
            }
            foreach (Pagina Auxiliar in Actual.Ramas)
            {
                Grafo = Enlazar(Auxiliar, Grafo);
                if (Auxiliar != null)
                {
                    Grafo += "N" + Actual.Nodos[1].ID + " -> N" + Auxiliar.Nodos[1].ID;
                }
            }
            return(Grafo);
        }
        /* CREA EL ARCHIVO '*.dot' ESCRIBIENDO EN EL LA LISTA DE NODOS Y LUEGO LOS ENLACES QUE TIENEN. */

        private String Enlistar(Pagina Actual, String Grafo)
        {
            if (Actual == null || Actual.isEmpty())
            {
                return(Grafo);
            }
            int Contador;

            Grafo += "N" + Actual.Nodos[1].ID + " [label=<\n";
            Grafo += "  <TABLE ALIGN = \"LEFT\">\n";
            Grafo += "      <TR>\n";
            for (Contador = 1; Contador < 5; Contador++)
            {
                if (Contador <= Actual.Cuenta)
                {
                    Grafo += "          <TD>" +
                             "ID = \"" + Actual.Nodos[Contador].ID + "\"<BR></BR>" +
                             "IDActivo = \"" + Actual.Nodos[Contador].Activo + "\"<BR></BR>" +
                             "Usuario = \"" + Actual.Nodos[Contador].Usuario + "\"<BR></BR>" +
                             "Empresa = \"" + Actual.Nodos[Contador].Empresa + "\"<BR></BR>" +
                             "Departamento = \"" + Actual.Nodos[Contador].Departamento + "\"<BR></BR>" +
                             "Fecha = \"" + Actual.Nodos[Contador].Fecha + "\"<BR></BR>" +
                             "Tiempo = \"" + Actual.Nodos[Contador].Tiempo + "\"" +
                             "           </TD>\n";
                }
                else
                {
                    Grafo += "          <TD>" +
                             "           </TD>\n";
                }
            }
            Grafo += "      </TR>\n";
            Grafo += "  </TABLE>\n";
            Grafo += ">, ];\n\t";
            foreach (Pagina Auxiliar in Actual.Ramas)
            {
                Grafo = Enlistar(Auxiliar, Grafo);
            }
            return(Grafo);
        }
        /* VERIFICA SI HAY QUE SUBIR UN NIVEL UN NODO, UTILIZANDO EL MÉTODO 'Empujar', Y LO HACE SI ES EL CASO. */

        private void Empujar(ref Pagina Actual, Nodo Nuevo, ref Boolean HayQueSubir, ref Nodo Mediana, ref Pagina Nueva)
        {
            int Indice = 0;

            if (Actual == null || Actual.isEmpty())
            {
                HayQueSubir = true;
                Mediana     = Nuevo;
                Actual      = null;
                Nueva       = null;
            }
            else
            {
                Boolean Esta = BuscarNodo(ref Actual, Nuevo.ID, ref Indice);
                if (Esta)
                {
                    Console.WriteLine("Dato duplicado.");
                    HayQueSubir = false;
                    Actual      = null;
                    return;
                }
                Empujar(ref Actual.Ramas[Indice], Nuevo, ref HayQueSubir, ref Mediana, ref Nueva);
                if (HayQueSubir)
                {
                    if (Actual.isFull())
                    {
                        Pagina Auxiliar = new Pagina();
                        DividirNodo(ref Actual, Mediana, ref Nueva, Indice, ref Mediana, ref Auxiliar);
                    }
                    else
                    {
                        HayQueSubir = false;
                        InsertarEnHoja(ref Actual, Mediana, Nueva, Indice);
                    }
                }
            }
        }
        /* SE COMBINAN DOS PÁGINAS DE LA PÁGINA 'Padre' LOCALIZADAS EN LA POSICIÓN 'Indice - 1' E 'Indice'. SE ALINEAN LOS NODOS
         * Y LAS PÁGINAS QUE TIENE DE HIJOS LOS NODOS MOVIDOS, ESTO SE DEBE A QUE ANTES SE BAJA DEL PADRE EL NODO EN LA POSICION
         * 'Indice', QUE ES LA CLAVE MEDIA. */

        public void Graficar()
        {
            if (Raiz == null || Raiz.isEmpty())
            {
                return;
            }
            String Grafo = "digraph ArbolB{\n\trankdir = UD;\n\tgraph [ratio = fill];\n\tnode [shape = plaintext]\n\t";

            Grafo  = Enlistar(Raiz, Grafo);
            Grafo += "\n\n\t";
            Grafo  = Enlazar(Raiz, Grafo);
            Grafo += "\n}";
            String Path = @"C:\Salidas";

            if (!Directory.Exists(Path))
            {
                Directory.CreateDirectory(Path);
            }
            Path = System.IO.Path.Combine(Path, "ArbolB.dot");
            StreamWriter Archivo = new StreamWriter(Path, false);

            Archivo.WriteLine(Grafo);
            Archivo.Close();
        }