• Sábado 14 de Diciembre de 2024, 17:31

Autor Tema:  Como Imprimir Los Nodos De Un Arbol Binario?  (Leído 11050 veces)

lemonde066

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Como Imprimir Los Nodos De Un Arbol Binario?
« en: Miércoles 9 de Abril de 2008, 17:30 »
0
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);
 }
}