[ Foro de C# ]

Duda en un codigo referente a arboles binarios

13-Dec-2015 23:43
Invitado (Ruf0o92)
3 Respuestas

Hola que tal tengo un trabajo donde tenia que modificar un código para cumplir algunas funcionalidades, entre ellas estaba esta:

Solicitar al usuario la captura de valores numéricos de manera repetitiva hasta que el usuario ya no desee continuar con esta operación.

Ya modifique el digo pero el programa me marca un error en el do while quisiera que me ayudaran a resolverlo

aquí esta el código:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ArbolBinarioOrdenado1
{
    public class ArbolBinarioOrdenado
    {
        class Nodo
        {
            public int info;
            public Nodo izq, der;
        }
        Nodo raiz;

        public ArbolBinarioOrdenado()
        {
            raiz = null;
        }

        public void Insertar(int info)
        {
            Nodo nuevo;
            nuevo = new Nodo();
            nuevo.info = info;
            nuevo.izq = null;
            nuevo.der = null;
            if (raiz == null)
                raiz = nuevo;
            else
            {
                Nodo anterior = null, reco;
                reco = raiz;
                while (reco != null)
                {
                    anterior = reco;
                    if (info < reco.info)
                        reco = reco.izq;
                    else
                        reco = reco.der;
                }
                if (info < anterior.info)
                    anterior.izq = nuevo;
                else
                    anterior.der = nuevo;
            }
        }


        private void ImprimirPre(Nodo reco)
        {
            if (reco != null)
            {
                Console.Write(reco.info + " ");
                ImprimirPre(reco.izq);
                ImprimirPre(reco.der);
            }
        }

        public void ImprimirPre()
        {
            ImprimirPre(raiz);
            Console.WriteLine();
        }

        private void ImprimirEntre(Nodo reco)
        {
            if (reco != null)
            {
                ImprimirEntre(reco.izq);
                Console.Write(reco.info + " ");
                ImprimirEntre(reco.der);
            }
        }

        public void ImprimirEntre()
        {
            ImprimirEntre(raiz);
            Console.WriteLine();
        }


        private void ImprimirPost(Nodo reco)
        {
            if (reco != null)
            {
                ImprimirPost(reco.izq);
                ImprimirPost(reco.der);
                Console.Write(reco.info + " ");
            }
        }


        public void ImprimirPost()
        {
            ImprimirPost(raiz);
            Console.WriteLine();
        }

        static void Main(string[] args)
        {
            ArbolBinarioOrdenado abo = new ArbolBinarioOrdenado();
            do
            {
                string texto = Console.ReadLine();
                if (texto != "") abo.Insertar(Convert.ToInt32(texto));
            }
            while (abo.Insertar);

            Console.WriteLine("Impresion preorden: ");
            abo.ImprimirPre();
            Console.WriteLine("Impresion entreorden: ");
            abo.ImprimirEntre();
            Console.WriteLine("Impresion postorden: ");
            abo.ImprimirPost();
            Console.ReadKey();
        }
    }
}


 


15-Dec-2015 10:20
Invitado (Caranim)

El error al que te refieres es sintáctico. En el while, entres los paréntesis debe de ir "algo" que devuelva un valor booleano y no es el caso. Realmente tratas de ejecutar un proceso y para hacer eso deberías de poner paréntesis al final: "abo.Insertar()". Aunque en este caso tampoco es la solución porqué no es una función que devuelva un valor, sino un proceso que se ejecuta sin valor de retorno alguno.

He hecho un par de modificaciones y ha funcionado.:


       static void Main(string[] args)
        {
            ArbolBinarioOrdenado abo = new ArbolBinarioOrdenado();
            bool Salir = false;

            do
            {
                string texto = Console.ReadLine();
                Salir = true;
                if (texto != "")
                {
                    abo.Insertar(Convert.ToInt32(texto));
                    Salir = false;
                }

                Console.WriteLine("Impresion preorden: ");
                abo.ImprimirPre();
                Console.WriteLine("Impresion entreorden: ");
                abo.ImprimirEntre();
                Console.WriteLine("Impresion postorden: ");
                abo.ImprimirPost();

            } while (!(Salir));

        }


La diferencia es que he incluido el listado de datos dentro del bucle también, con lo que te muestra todos los datos cada vez que añades uno nuevo a la lista. Si quieres mostrarlos únicamente al final deberías de sacar esas seis líneas fuera del bucle.

Espero que te ayude.

Un saludo.


16-Dec-2015 20:50
Jacobo Trinidad Garcia Lopez

Hola soy nuevo y como tu anduve batallando... hasta que por pude hacer todo perfectamente en cuanto a arboles y listas enlazadas, te dejo el link.... no para que lo uses... sino para que revises e inspecciones tu codigo y te sirva para poder comprender que esta haciendo tu logica

https://mega.nz/#!8tEREDYA

Saludos y suerte.


17-Dec-2015 13:47
Nacho Cabanes (+83)

Jacobo, no entiendo que pongas un enlace externo en vez de incluir aquí tu fuente para que el hilo sea autocontenido y ayude más a la persona que preguntó.

Además, tu enlace está encriptado, por lo que es totalmente inútil. Por ello, borraré tu respuesta en dos días.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)