• Domingo 22 de Diciembre de 2024, 07:03

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - bugmenot2

Páginas: [1]
1
C# / Re: Sobre Árboles en C#
« en: Viernes 29 de Junio de 2018, 16:55 »
using System;


namespace ejemplo{
   
public class NodoT
    {
        public NodoT NodoIzquierdo;
        public int Informacion;
        public NodoT NodoDerecho;
        //Constructor
        public NodoT()
        {
            this.NodoIzquierdo=null;
            this.Informacion=0;
            this.NodoDerecho=null;
        }
    }
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
//            ClearConsole ClearMyConsole = new ClearConsole();
            int Opcion=0;
            NodoT Raiz=null;
            int Dato;
            do
            {
                Opcion=Menu();
                switch(Opcion)
                {
                    case 1: Console.Write("Valor del Nuevo Nodo: ");
                            Dato=int.Parse(Console.ReadLine());
                            if(Raiz==null)
                            {
                                NodoT NuevoNodo=new NodoT();
                                NuevoNodo.Informacion=Dato;
                                Raiz=NuevoNodo;
                            }
                            else
                            {
                                Insertar(Raiz, Dato);
                            }
//                            ClearMyConsole.Clear();
                            Console.Clear();
                            break;
                            //Recorrido en Pre Orden del Arbol
                    case 2: RecorridoPreorden(Raiz);
                            Console.WriteLine("Fin del Recorrido,...");
                            Console.ReadLine();
//                            ClearMyConsole.Clear();
                            Console.Clear();
                            break;
                            //Recorrido en Post Orden del Arbol
                    case 3: RecorridoPostorden(Raiz);
                            Console.WriteLine("Fin del Recorrido,...");
                            Console.ReadLine();
//                            ClearMyConsole.Clear();
                            Console.Clear();
                            break;
                            //Recorrido en In Orden del Arbol
                    case 4: RecorridoInorden(Raiz);
                            Console.WriteLine("Fin del Recorrido,...");
                            Console.ReadLine();
//                            ClearMyConsole.Clear();
                            Console.Clear();
                            break;
                    case 5: Console.Write("Teclee el Dato a Buscar: ");
                            Dato=int.Parse(Console.ReadLine());
                            if(Raiz!=null)
                            {
                                BuscarNodo(Raiz, Dato);
                            }
                            else
                            {
                                Console.WriteLine("ERROR, Arbol Vacio....");
                            }                           
//                            ClearMyConsole.Clear();
                            Console.Clear();
                            break;
                    case 6: Console.Write("Teclee el Dato a Eliminar: ");
                            Dato=int.Parse(Console.ReadLine());
                            if(Raiz!=null)
                            {
                                EliminarNodo(ref Raiz, Dato);
                            }
                            else
                            {
                                Console.WriteLine("ERROR, Arbol Vacio....");
                            }   
//                            ClearMyConsole.Clear();
                            Console.Clear();
                            break;
                    case 7: Finalizar();
                            break;
                }
            }while(Opcion!=7);
 
        }
        static int Menu()
        {
//            ClearConsole ClearMyConsole = new ClearConsole();
            int Resultado=0;
            do
            {
                Console.WriteLine("MENU DE ARBOLES");
                Console.WriteLine("");
                Console.WriteLine("1.- Registrar un Nuevo Nodo");
                Console.WriteLine("2.- Recorrido en Pre-orden");
                Console.WriteLine("3.- Recorrido en Post-orden");
                Console.WriteLine("4.- Recorrido en In-orden");
                Console.WriteLine("5.- Buscar un Nodo");
                Console.WriteLine("6.- Eliminar un Nodo");
                Console.WriteLine("7.- Finalizar el Programa");
                Console.WriteLine("");
                Console.Write("Teclee la Opcion Deseada: ");
                Resultado=int.Parse(Console.ReadLine());
                Console.WriteLine("");
                if(Resultado<1||Resultado>7)
                {
                    Console.WriteLine("ERROR, Opcion Invalida....");
                    Console.ReadLine();
                    Console.WriteLine("");
                }
//                ClearMyConsole.Clear();
                Console.Clear();
            }while(Resultado<1||Resultado>7);
            return Resultado;
        }
        //Insertar en un arbol binario
        static void Insertar(NodoT Raiz, int Dato)
        {
            if(Dato<Raiz.Informacion)
            {
                if(Raiz.NodoIzquierdo==null)
                {
                    NodoT NuevoNodo=new NodoT();
                    NuevoNodo.Informacion=Dato;
                    Raiz.NodoIzquierdo=NuevoNodo;
                }
                else
                {
                    //Llamada recursiva
                    Insertar(Raiz.NodoIzquierdo, Dato);
                }
            }
            else//Buscar por el lado derecho
            {
                if(Dato>Raiz.Informacion)
                {
                    if(Raiz.NodoDerecho==null)
                    {
                        NodoT NuevoNodo=new NodoT();
                        NuevoNodo.Informacion=Dato;
                        Raiz.NodoDerecho=NuevoNodo;
                    }
                    else
                    {
                        //Llamada recursiva por el lado derecho
                        Insertar(Raiz.NodoDerecho, Dato);
                    }
                }
                else
                {
                    //El Nodo existe en el Arbol
                    Console.WriteLine("Nodo Existente, Imposible Insertar...");
                    Console.ReadLine();
                }
            }
        }
        //Metodo de recorrido en Pre-Orden
        static void RecorridoPreorden(NodoT Raiz)
        {
            if(Raiz!=null)
            {
                Console.Write("{0}, ",Raiz.Informacion);
                RecorridoPreorden(Raiz.NodoIzquierdo);
                RecorridoPreorden(Raiz.NodoDerecho);
            }
        }
        //Metodo de recorrido en In-Orden
        static void RecorridoInorden(NodoT Raiz)
        {
            if(Raiz!=null)
            {
                RecorridoInorden(Raiz.NodoIzquierdo);
                Console.Write("{0}, ",Raiz.Informacion);               
                RecorridoInorden(Raiz.NodoDerecho);
            }
        }
        //Metodo de recorrido en Post-Orden
        static void RecorridoPostorden(NodoT Raiz)
        {
            if(Raiz!=null)
            {
                RecorridoPostorden(Raiz.NodoIzquierdo);                             
                RecorridoPostorden(Raiz.NodoDerecho);
                Console.Write("{0}, ",Raiz.Informacion);
            }
        }
        //Metodo de Buscar un nodo
        static void BuscarNodo(NodoT Raiz, int Dato)
        {
            if(Dato<Raiz.Informacion)
            {
                //Buscar por el Sub-Arbol izquierdo
                if(Raiz.NodoIzquierdo==null)
                {
                    Console.WriteLine("ERROR, No se encuentra el Nodo...");
                    Console.ReadLine();
                }
                else
                {
                    BuscarNodo(Raiz.NodoIzquierdo, Dato);
                }
            }
            else
            {
                if(Dato>Raiz.Informacion)
                {
                    //Buscar por el Sub-Arbol derecho
                    if(Raiz.NodoDerecho==null)
                    {
                        Console.WriteLine("ERROR, No se encuentra el Nodo...");
                        Console.ReadLine();
                    }
                    else
                    {
                        BuscarNodo(Raiz.NodoDerecho, Dato);
                    }
                }
                else
                {
                    //El nodo se encontro
                    Console.WriteLine("Nodo Localizado en el Arbol...");
                    Console.ReadLine();
                }
            }
        }
        //Metodo de Eliminar
        static void EliminarNodo(ref NodoT Raiz, int Dato)
        {
            if(Raiz!=null)
            {
                if(Dato<Raiz.Informacion)
                {
                    EliminarNodo(ref Raiz.NodoIzquierdo, Dato);
                }
                else
                {
                    if(Dato>Raiz.Informacion)
                    {
                        EliminarNodo(ref Raiz.NodoDerecho, Dato);
                    }
                    else
                    {
                        //Si lo Encontro
                        NodoT NodoEliminar=Raiz;
                        if(NodoEliminar.NodoDerecho==null)
                        {
                            Raiz=NodoEliminar.NodoIzquierdo;
                        }
                        else
                        {
                            if(NodoEliminar.NodoIzquierdo==null)
                            {
                                Raiz=NodoEliminar.NodoDerecho;
                            }
                            else
                            {
                                NodoT AuxiliarNodo=null;
                                NodoT Auxiliar=Raiz.NodoIzquierdo;
                                bool Bandera=false;
                                while(Auxiliar.NodoDerecho!=null)
                                {
                                    AuxiliarNodo=Auxiliar;
                                    Auxiliar=Auxiliar.NodoDerecho;
                                    Bandera=true;
                                }
                                Raiz.Informacion=Auxiliar.Informacion;
                                NodoEliminar=Auxiliar;
                                if(Bandera==true)
                                {
                                    AuxiliarNodo.NodoDerecho=Auxiliar.NodoIzquierdo;
                                }
                                else
                                {
                                    Raiz.NodoIzquierdo=Auxiliar.NodoIzquierdo;
                                }
                            }
                        }
                    }
                }               
            }
            else
            {
                Console.WriteLine("ERROR, EL Nodo no se Encuentra en el Arbol...");
                Console.ReadLine();
            }
        }
        //Metodo de Finalizacion
        static void Finalizar()
        {
            Console.WriteLine("Fin del Programa, presione una tecla para continuar,...");
            Console.ReadLine();
        }
    }
}

Páginas: [1]