Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Recorridos en un arbol binario en c++

Estas en el tema de Recorridos en un arbol binario en c++ en el foro de C/C++ en Foros del Web. Hola a todos, después de buscar por todos lados, aún no doy en cómo imprimir el recorrido preorden de mi arbol binario. El programa no ...
  #1 (permalink)  
Antiguo 28/09/2009, 10:20
Avatar de thebestboy2671  
Fecha de Ingreso: enero-2008
Mensajes: 138
Antigüedad: 16 años, 10 meses
Puntos: 1
Pregunta Recorridos en un arbol binario en c++

Hola a todos, después de buscar por todos lados, aún no doy en cómo imprimir el recorrido preorden de mi arbol binario. El programa no tiene error de sintaxis, pero lo que pasa es que cuando se va a generar la impresion, la misma arroja basura, puedo pensar que el error esta en la parte donde se leen los valores del nodo, en verdad no tengo ni la más mínima idea de qué es lo que está mal. Les agradeceria cualquier tipo de ayuda. Saludos.
Código:
#include <iostream.h>

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define NULL 0

//

//Programa que carga los nodos de un �rbol binario en memoria.

struct treenodo {

   struct treenodo *izqptr;  //puntero al nodo izquierdo

   char dato[40];     //dato del nodo

   struct treenodo *derptr; // puntero al nodo derecho

};



void crear(treenodo *nodo){ //crea un �arbol binario

char resp[1];

clrscr();

cout<< "Entre el dato ";

gets (nodo->dato);

cout <<"Hay nodos a la Izquierda entre S/N ";

gets(resp);

if (strcmp(resp, "S")== 0) {

    nodo->izqptr= new (treenodo);

    crear(nodo->izqptr); }

else

    nodo->izqptr=NULL;

    cout <<"Hay nodos a la Derecha entre S/N ";

    gets(resp);

    if (strcmp(resp, "S")== 0) {

       nodo->derptr= new (treenodo);

       crear(nodo->derptr); }

   else

       nodo->derptr=NULL;

return;

}



//Recorrido en Pre-Orden



void preorden(treenodo *nodo){

  if (nodo != NULL) {

    printf("%c", nodo->dato);   //Realiza una operación en nodo

	preorden(nodo->izqptr);

    preorden(nodo->derptr);

  }

}



void main(int){

treenodo *nodo;   // puntero al nodo

nodo= new treenodo;

crear(nodo);

preorden(nodo);

getch();

}
__________________
Si te he ayudado con mis conocimientos, añádeme algo de Karma :P
  #2 (permalink)  
Antiguo 28/09/2009, 12:20
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: Recorridos en un arbol binario en c++

hola compañero aqui te dejo el codigo ya modificado a lo que necesitas

Código:
// nodo1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

//#include <iostream.h>

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define NULL 0

//

//Programa que carga los nodos de un �rbol binario en memoria.

struct treenodo {

	struct treenodo *izqptr;  //puntero al nodo izquierdo

	char dato[40];     //dato del nodo

	struct treenodo *derptr; // puntero al nodo derecho

};



void crear(treenodo *nodo){ //crea un �arbol binario

	char resp[2];

	printf("Entre el dato ");

	gets (nodo->dato);

	printf("Hay nodos a la Izquierda entre S/N ");

	gets(resp);

	if (strcmp(resp, "S")== 0) {

		nodo->izqptr= new treenodo();

		crear(nodo->izqptr); }

	else

		nodo->izqptr=NULL;

	printf("Hay nodos a la Derecha entre S/N ");

	gets(resp);

	if (strcmp(resp, "S")== 0) {

		nodo->derptr= new treenodo();

		crear(nodo->derptr); }

	else

		nodo->derptr=NULL;

	return;

}



//Recorrido en Pre-Orden



void preorden(treenodo *nodo){

	if (nodo != NULL) {

		printf("%s", (*nodo).dato);

		preorden(nodo->izqptr);

		preorden(nodo->derptr);

	}

}



void main(int){

	treenodo *nodo;   // puntero al nodo

	nodo= new treenodo();

	crear(nodo);

	preorden(nodo);

	getch();

}
por cierto lo hice en vc++ 2008 por eso los archivos de cabecera comentados

basicamente lo que movi fue que la veriable resp necesitaba otro espacio debido a que el gets guarda el \0 y el siguiente error era que estabas inicializando mal debe ser asi: new treenodo(); y no asi: new (treenodo);

saludos

Anubis_Slash


EDITO: como nota te recomiendo que validez la S en minuscula ( s ) y la N en minuscula tambien para que pueda acceder al apartado que deseas, asi como al momento de imprimir los datos hacerlo con saltos de linea.....
__________________
Bienvenidos los karmas.
Quejas, sugerencias o dudas, se awantan......

Última edición por Anubis_Slash; 28/09/2009 a las 12:32
  #3 (permalink)  
Antiguo 30/09/2009, 21:13
Avatar de thebestboy2671  
Fecha de Ingreso: enero-2008
Mensajes: 138
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Recorridos en un arbol binario en c++

Wow, me salvaste la vida. Gracias por tu ayuda, fue mucha y justo a tiempo. Disculpa la demora en responderte, pero bueno... gracias de nuevo. Saludos.
__________________
Si te he ayudado con mis conocimientos, añádeme algo de Karma :P
  #4 (permalink)  
Antiguo 01/10/2009, 03:25
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 17 años
Puntos: 3
Respuesta: Recorridos en un arbol binario en c++

grrr... no me gusta nada que eso sea una pregunta de c++, aunque no he visto ni una linea de c++ en todo el codigo. Todo esto es C, y C puro ademas... C y C++ son muy distinto. Aunque tienen una base comun (cada vez mas pequeña), no es la misma manera de programar.

Ahora entiendo mejor porque he visto tantos void* en el codigo c++ de los becarios, y porque un chaval hereda un circulo de un punto...
  #5 (permalink)  
Antiguo 01/10/2009, 20:26
Avatar de thebestboy2671  
Fecha de Ingreso: enero-2008
Mensajes: 138
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Recorridos en un arbol binario en c++

Es cierto que C y C++ son similares. Para mí la forma de programar en C++ sería usando objetos, clases. Creo que ahí es donde radica la potencia y la razón de C++. Aún así, en mi Universidad se enseña de esta forma... programación estructurada. Saludos.
__________________
Si te he ayudado con mis conocimientos, añádeme algo de Karma :P
  #6 (permalink)  
Antiguo 01/10/2009, 22:21
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 17 años
Puntos: 3
Respuesta: Recorridos en un arbol binario en c++

Cita:
Iniciado por thebestboy2671 Ver Mensaje
Es cierto que C y C++ son similares.
Que no... ahora el C y el C++ son muy muy distintos. Hay una base comun, pero nada mas. Los paradigmas son oposados. No se usara el C para el mismo tipo de programas, y la manera de diseñarlo sera diferente tambien.

Cita:
Iniciado por thebestboy2671 Ver Mensaje
Para mí la forma de programar en C++ sería usando objetos, clases. Creo que ahí es donde radica la potencia y la razón de C++.
No es solo esto, de largo, pero aun seria solo esto, seria ya una diferencia radical. El c++ no añade solo el paradigmo objeto, sino tambien muchas otras cosas (templates, exceptiones, referencias, operadores...).

Cita:
Iniciado por thebestboy2671 Ver Mensaje
Aún así, en mi Universidad se enseña de esta forma... programación estructurada. Saludos.
No sé que es "programacion estructurada"... y no veo lo que puede significar porque no veo que podria ser el resto."¿programacion destructurada"?

No es paranoia mia. B. Stroustrup, el creador del c++, siempre lo dice tambien. El C y el C++ son muy distintos, son dos maneras de programar totalment diferentes.

Creo que voy a escribir algo sobre este tema, porque es importantisimo.
__________________
Alicia: Sólo quiero saber que camino debo tomar.
Gato risón: Pues... depende mucho de donde quieras ir.

Mi página web
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:55.