public void Arbol1()
        {
            Arbol arbol = new Arbol();
            Nodo  raiz  = arbol.Agregar("E", null);   //se agrega el nodo raiz

            arbol.Agregar("F", raiz);                 //se agrega el nodo F como hijo del nodo raiz

            Nodo subRaizA = arbol.Agregar("A", raiz); //se agrega el nodo A como hijo del nodo raiz, pero tambien como un raiz de un subarbol

            arbol.Agregar("B", subRaizA);             //se le agrega a la subraiz A los 3 nodos hijos B, C, D
            arbol.Agregar("C", subRaizA);
            arbol.Agregar("D", subRaizA);

            arbol.Imprimir(raiz);
        }
        public void Arbol2()
        {
            Arbol arbol = new Arbol();
            Nodo  raiz  = arbol.Agregar("C", null); //se agrega el nodo raiz C

            arbol.Agregar("D", raiz);               // se agregan los nodos D y F como hijos de la raiz
            arbol.Agregar("F", raiz);

            Nodo subRaizA = arbol.Agregar("A", raiz);     // se agrega el nodo A como hijo de la raiz, pero tambien como raiz de un subarbol
            Nodo subRaizB = arbol.Agregar("B", subRaizA); // a su vez el nodo hijo de la subraiz A se agrega como otra subraiz

            arbol.Agregar("E", subRaizB);                 //se agrega el nodo hijo a la subraiz B
            arbol.Agregar("G", raiz);                     // se agrega el ultimo nodo hijo de la raiz

            arbol.Imprimir(raiz);
        }
        public void Arbol3()
        {
            Arbol arbol = new Arbol();
            Nodo  raiz  = arbol.Agregar("K", null); // se agrega el nodo raiz K

            arbol.Agregar("B", raiz);               //se agregan B, A y C como nodos hijos de la raiz
            arbol.Agregar("A", raiz);
            arbol.Agregar("C", raiz);

            Nodo subRaizD = arbol.Agregar("D", raiz);     // se agrega D como hijo de la raiz, pero tambien como raiz de un subarbol
            Nodo subRaizI = arbol.Agregar("I", subRaizD); // se agrega I como hijo de la subraiz D, pero tambien como raiz de un subarbol

            arbol.Agregar("J", subRaizI);                 // se agrega J como hijo del nodo I
            Nodo subRaizE = arbol.Agregar("E", subRaizD); // se agrega E como hijo del nodo D, pero tambien como raiz de un subarbol

            arbol.Agregar("F", subRaizE);                 // se agrega F como hijo del nodo subraiz E
            Nodo subRaizG = arbol.Agregar("G", subRaizE); // se agrega G como hijo del nodo E, pero tambien como raiz de un subarbol

            arbol.Agregar("H", subRaizG);                 // se agrega H como hijo del nodo G

            arbol.Imprimir(raiz);
        }
        static void Main(string[] args)
        {
            int   opc   = 0;
            Arbol arbol = new Arbol();                                                             //Creamos objeto arbol

            Console.Write("Ingrese que arbol quiere analizar: \nA) = 1 \nB) = 2 \nC) = 3 \nR = "); //Menu
            opc = int.Parse(Console.ReadLine());

            if (opc == 1)                              //Si elige 1, arbol a)
            {
                Nodo raiz = arbol.Insertar("E", null); //Nodo raiz

                arbol.Insertar("F", raiz);
                Nodo n = arbol.Insertar("A", raiz);
                arbol.Insertar("B", n);
                arbol.Insertar("C", n);
                arbol.Insertar("D", n);

                Console.WriteLine();
                arbol.Imprimir(raiz);                                            //Mandamos a llamar al Metodo imprimir para mostar el arbol en orden

                Console.WriteLine("Altura del arbol: {0}", arbol.Altura2(raiz)); //Metodo para calcular altura
                Console.WriteLine("Numero de Niveles: {0}", arbol.Nivel2(raiz)); //Metodo para calcular nivel
                arbol.Recorrido(opc);                                            //Imprime recorrido mas largo

                //arbol.Recorrido(raiz);
                //arbol.Imprimir2();
            }

            if (opc == 2)                              //Si elige 2, arbol b)
            {
                Nodo raiz = arbol.Insertar("C", null); //Nodo raiz
                Nodo n    = arbol.Insertar("A", raiz);
                Nodo j    = arbol.Insertar("B", n);
                arbol.Insertar("E", j);

                arbol.Insertar("G", raiz);
                arbol.Insertar("F", raiz);
                arbol.Insertar("D", raiz);

                Console.WriteLine();
                arbol.Imprimir(raiz);                                            //Mandamos a llamar al Metodo imprimir para mostar el arbol en orden
                Console.WriteLine("Altura del arbol: {0}", arbol.Altura2(raiz)); //Metodo para calcular altura
                Console.WriteLine("Numero de Niveles: {0}", arbol.Nivel2(raiz)); //Metodo para calcular nivel
                arbol.Recorrido(opc);                                            //Imprime recorrido mas largo

                //arbol.Recorrido(raiz);
                //arbol.Imprimir2();
            }

            if (opc == 3)                              //Si elige 2, arbol b)
            {
                Nodo raiz = arbol.Insertar("K", null); //Nodo raiz
                arbol.Insertar("B", raiz);
                Nodo d = arbol.Insertar("D", raiz);
                Nodo i = arbol.Insertar("I", d);
                arbol.Insertar("J", i);

                Nodo e = arbol.Insertar("E", d);
                Nodo g = arbol.Insertar("G", e);
                arbol.Insertar("H", g);
                arbol.Insertar("F", e);

                arbol.Insertar("C", raiz);
                arbol.Insertar("A", raiz);

                Console.WriteLine();
                arbol.Imprimir(raiz);                                                //Mandamos a llamar al Metodo imprimir para mostar el arbol en orden
                Console.WriteLine("Altura del arbol: {0}", arbol.Altura2(raiz) - 1); //Metodo para calcular altura
                Console.WriteLine("Numero de Niveles: {0}", arbol.Nivel2(raiz) - 1); //Metodo para calcular nivel
                arbol.Recorrido(opc);                                                //Imprime recorrido mas largo

                //arbol.Recorrido(raiz); arbol.Recorrido(raiz);
                //arbol.Imprimir2();
            }

            Console.ReadKey();
            //Codigo basado en:
            //https://www.youtube.com/watch?v=90qdczicwxw&fbclid=IwAR29A69kZL2_cgGyZkioN3cPq_GYO97PeYNOKpgIL_Mz0MZ7IssbUkIzZks
        }