Arbol binario Ejemplo

Iniciado por S1dD3xt35, 21 Abril 2010, 07:18 AM

0 Miembros y 1 Visitante están viendo este tema.

S1dD3xt35

Saludos :P  bueno les dejo un ejemplo de un arbol binario que hice en la escuela espero le sirva alguen de ejemplo

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace ConsoleApplication1

{

    class Program

    {

        class arbol

        {

            private double info;

            private arbol izq, der;



            // Constructor Nodo

            public arbol()

            {

                info = 0;

                izq = null;

                der = null;

            }



            // Apuntador Raiz

            public arbol raiz = null;



            public void Insertar()

            {

                arbol p = new arbol();

                arbol q = new arbol();

                int bandera = 0;

                double dato;

                p.izq = null;

                p.der = null;



                Console.Write("Introduce el Dato: ");

                dato = Double.Parse(Console.ReadLine());

                p.info = dato;



                if (raiz == null)

                {

                    raiz = p;

                }



                else

                {

                    q = raiz;

                    while (bandera != 1)

                    {

                        if (p.info < q.info)

                        {

                            if (q.izq == null)

                            {

                                q.izq = p;

                                bandera = 1;

                            }



                            else

                            {

                                q = q.izq;

                            }



                        }



                        else

                        {

                            if (q.der == null)

                            {

                                q.der = p;

                                bandera = 1;

                            }



                            else

                            {

                                q = q.der;

                            }

                        }

                    }

                }

            }



            public void Preorden(arbol temp)

            {

                if (temp != null)

                {

                    Console.WriteLine(temp.info);

                    if (temp.izq != null)

                    {

                        Preorden(temp.izq);

                    }

                    if (temp.der != null)

                    {

                        Preorden(temp.der);

                    }

                }



                else

                {

                    Console.WriteLine("\nEl Arbol Binario Esta Vacio");

                }

            }



            public void Inorden(arbol temp)

            {

                if (temp != null)

                {

                    if (temp.izq != null)

                    {

                        Inorden(temp.izq);

                    }



                    Console.WriteLine(temp.info);



                    if (temp.der != null)

                    {

                        Inorden(temp.der);

                    }



                }



                else

                {

                    Console.WriteLine("\nEl Arbol Binario Esta Vacio");

                }

            }



            public void Posorden(arbol temp)

            {

                if (temp != null)

                {

                    if (temp.izq != null)

                    {

                        Posorden(temp.izq);

                    }



                    if (temp.der != null)

                    {

                        Posorden(temp.der);

                    }



                    Console.WriteLine(temp.info);

                }



                else

                {

                    Console.WriteLine("\nEl Arbol Binario Esta Vacio");

                }

            }



            public void BusquedaRecursiva(arbol temp, double x)

            {

                if (temp == null)

                {

                    Console.WriteLine("\nEl Nodo {0:F2} NO Esta en el Arbol Binario", x);

                }



                else

                {

                    if (x == temp.info)

                    {

                        Console.WriteLine("\nEl Nodo {0:F2} SI Esta en el Arbol Binario", x);

                    }



                    else

                    {

                        if (x < temp.info)

                        {

                            BusquedaRecursiva(temp.izq, x);

                        }



                        else

                        {

                            BusquedaRecursiva(temp.der, x);

                        }

                    }

                }

            }



            public void BusquedaIterativa(arbol temp, double x)

            {

                bool encontrado = false;



                while (temp != null && encontrado == false)

                {

                    if (x == temp.info)

                    {

                        encontrado = true;

                    }



                    else

                    {

                        if (x < temp.info)

                        {

                            temp = temp.izq;

                        }



                        else

                        {

                            temp = temp.der;

                        }

                    }

                }



                if (encontrado == false)

                {

                    Console.WriteLine("\nEl Nodo {0:F2} NO Esta en el Arbol Binario", x);

                }



                else

                {

                    Console.WriteLine("\nEl Nodo {0:F2} SI Esta en el Arbol Binario", x);

                }

            }



            public void Eliminar()

            {

                arbol p, q, v, s, t;

                bool encontrado;

                double x;

                p = raiz;

                q = null;

                encontrado = false;



                if (p != null)

                {

                    Console.Write("¿Nodo a Eliminar?: ");

                    x = Int32.Parse(Console.ReadLine());

                    while (p != null && encontrado == false)

                    {

                        if (p.info == x)

                        {

                            encontrado = true;

                            Console.WriteLine("\nEl Nodo {0:F2} Sera Eliminado del Arbol Binaraio", p.info);

                        }



                        else

                        {

                            q = p;

                            if (x < p.info)

                            {

                                p = p.izq;

                            }



                            else

                            {

                                p = p.der;

                            }

                        }

                    }



                    if (encontrado == true)

                    {

                        if (p.izq == null)

                        {

                            v = p.der;

                        }



                        else

                        {

                            if (p.der == null)

                            {

                                v = p.izq;

                            }



                            else

                            {

                                t = p;

                                v = p.der;

                                s = v.izq;



                                while (s != null)

                                {

                                    t = v;

                                    v = s;

                                    s = v.izq;

                                }



                                if (t != p)

                                {

                                    t.izq = v.der;

                                    v.der = p.der;

                                }

                            }



                            v.izq = p.izq;

                        }



                        if (q == null)

                        {

                            raiz = v;

                        }



                        else

                        {

                            if (p == q.izq)

                            {

                                q.izq = v;

                            }



                            else

                            {

                                q.der = v;

                            }

                        }

                    }



                    else

                    {

                        Console.WriteLine("\nEl Nodo {0:F2} NO Esta en el Arbol Binario", x);

                    }



                }



                else

                {

                    Console.WriteLine("\nEl Arbol Binario Esta Vacio");

                }

            }



        }



        static void Main(string[] args)

        {

            int opcion;

            double x;

            arbol objeto = new arbol();



            do

            {

                Console.Clear();

                Console.ForegroundColor = ConsoleColor.Green;

                Console.WriteLine("\t\t\t\t\tMenu Arboles Binarios\n");

                Console.WriteLine("1.- Insercion Nodos");

                Console.WriteLine("2.- Recorrido Preorden");

                Console.WriteLine("3.- Recorrido Inorden");

                Console.WriteLine("4.- Recorrido Posorden");

                Console.WriteLine("5.- Busqueda Recursiva");

                Console.WriteLine("6.- Busqueda Iterativa");

                Console.WriteLine("7.- Eliminacion Nodos");

                Console.WriteLine("8.- Salir del Programa");

                Console.ForegroundColor = ConsoleColor.White;

                Console.Write("\nopcion ☻☺: ");

                opcion = int.Parse(Console.ReadLine());

                switch (opcion)

                {

                    case 1:

                        Console.Clear();

                        objeto.Insertar();

                        break;



                    case 2:

                        Console.Clear();

                        objeto.Preorden(objeto.raiz);

                        Console.ForegroundColor = ConsoleColor.White;

                        Console.WriteLine("\nPresione enter Para Continuar");

                        Console.ReadLine();

                        break;



                    case 3:

                        Console.Clear();

                        objeto.Inorden(objeto.raiz);

                        Console.ForegroundColor = ConsoleColor.White;

                        Console.WriteLine("\nPresione enter Para Continuar");

                        Console.ReadLine();

                        break;



                    case 4:

                        Console.Clear();

                        objeto.Posorden(objeto.raiz);

                        Console.ForegroundColor = ConsoleColor.White;

                        Console.WriteLine("\nPresione enter Para Continuar");

                        Console.ReadLine();

                        break;



                    case 5:

                        Console.Clear();

                        Console.Write("Dato a Buscar: ");

                        x = Double.Parse(Console.ReadLine());

                        objeto.BusquedaRecursiva(objeto.raiz, x);

                        Console.ForegroundColor = ConsoleColor.White;

                        Console.WriteLine("\nPresione enter Para Continuar");

                        Console.ReadLine();

                        break;



                    case 6:

                        Console.Clear();

                        Console.ForegroundColor = ConsoleColor.White;

                        Console.Write("Dato a Buscar: ");

                        x = Double.Parse(Console.ReadLine());

                        objeto.BusquedaIterativa(objeto.raiz, x);

                        Console.ForegroundColor = ConsoleColor.White;

                        Console.WriteLine("\nPresione enter Para Continuar");

                        Console.ReadLine();

                        break;



                    case 7:

                        Console.Clear();

                        objeto.Eliminar();

                        Console.ForegroundColor = ConsoleColor.White;

                        Console.WriteLine("\nPresione enter Para Continuar");

                        Console.ReadLine();

                        break;



                    case 8:

                        Console.Clear();

                        Console.ForegroundColor = ConsoleColor.White;

                        Console.WriteLine("\nPresione enter Para Salir del Programa");

                        Console.ReadLine();

                        break;



                    default:

                        Console.ForegroundColor = ConsoleColor.Red;

                        Console.WriteLine("\nOpcion Invalida");

                        break;

                }

            } while (opcion != 8);

        }

    }

}