1
« en: Miércoles 9 de Abril de 2008, 17:30 »
como estan amigos. he buscado en internet y en muchos codigos fuente, pero mi duda surge porque no logro que me ordene los datos en preorden, inorden y postorden?. imprimo los valores cada vez que los ingreso al arbol para verificar que si estan entrando; pero a la hora de llamar a mi funcion dependiendo que tipo de orden quiero se queda en overflow; segun he revisado y al parecer me toma la raiz =NULL. no tengo mucha experiencia como programador y menos en arboles
utilizo turbo c++ IDE en una pentium IV de 3 ghz.
adjunto mi codigo para que alguien pueda ver lo que yo no.
pd. en el "case" existen opciones que he puesto pero aun no tienen su funcion respeciva.
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define NULL 0
int nodo;
int cuenta_nodos=0;
int contador[6];
void menu(void);
void inserta(struct arbol *raiz, int nodo);
void preorden(struct arbol *raiz);
void inorden(struct arbol *raiz);
void postorden(struct arbol *raiz);
struct arbol
{
int dato;
struct arbol *izq;
struct arbol *der;
};
struct arbol *raiz=NULL;
main(void)
{
clrscr();
menu();
getch();
return 0;
}
void menu(void)
{clrscr();
int opcion;
gotoxy(1,30);cout<<("1...ingresar nodo");
gotoxy(1,31);cout<<("2...ordenar en preorden");
gotoxy(1,32);cout<<("3...ordenar en inorden");
gotoxy(1,33);cout<<("4...ordenar en postorden");
gotoxy(1,34);cout<<("5...cuantos nodos tiene el arbol ");
gotoxy(1,35);cout<<("6...cual es el valor maximo ");
gotoxy(1,36);cout<<("7...promedio valor de los nodos");
gotoxy(1,37);cout<<("0...salir");
gotoxy(1,38);cin>>opcion;
switch(opcion)
{ case 1:
{ for (int j=0;j<7;j++)
{ gotoxy(1,1);cout<<("ingresa valor");
gotoxy(18,1);cin>>nodo;
inserta(raiz,nodo);
}
menu(); break;
}
case 2: { preorden(raiz);
getch();
menu(); break;
}
case 3: { inorden(raiz);
menu(); break;
}
case 4: { postorden(raiz);
getch();
menu(); break;
}
case 5: { gotoxy(1,15); cout<<("tiene",cuenta_nodos);
getch();
menu(); break;
}
case 0:
{ break ;}
default:
menu();
}
}
void inserta (arbol *raiz,int nodo)
{
if (raiz==NULL)
{
raiz=(arbol *)malloc(sizeof(arbol*));
raiz->dato=nodo;
cuenta_nodos=cuenta_nodos+1;
contador[cuenta_nodos]=nodo;
raiz->izq=raiz->der=NULL;
gotoxy(15,2); cout<<("la raiz es ",raiz->dato);
gotoxy(20,4); cout<<("el nodo derecho es:", raiz->der);
gotoxy(5,4); cout<<("el nodo izquierdo es:", raiz->izq);
gotoxy(30,1); cout<<("ef",contador);
gotoxy(45,1); cout<<contador[cuenta_nodos];
getch();
}
else
if (raiz->dato < nodo)
{ inserta(raiz->der,nodo);}
else
if (raiz->dato >nodo)
{ inserta (raiz->izq, nodo);}
}
void inorden(arbol *raiz)
{
if(raiz!=NULL)
{
inorden(raiz->izq);
printf("%d",raiz->dato);
inorden(raiz->der);
getch();
}
else
{
cout<<("el arbol no tiene nodos");
}
}
void preorden(arbol *raiz)
{
if(raiz!=NULL)
{
printf("%d ",raiz->dato);
preorden(raiz->izq);
preorden(raiz->der);
}
}
void postorden(arbol *raiz)
{
if(raiz!=NULL)
{
postorden(raiz->izq);
postorden(raiz->der);
printf("%d ",raiz->dato);
}
}