ARBOL EN C++
Enviado por eliecer1592 • 13 de Junio de 2012 • 1.024 Palabras (5 Páginas) • 511 Visitas
El programa genera un arbol binario, captura caracteres y los introduce en el arbol, despues muestra los recorridos en preorden, inorden y postorden. Maneja memoria dinamica!!!
//PROGRAMA QUE CAPTURA UNA CADENA DE CARACTERES DE MAXIMO 200 ELEMENTOS Y
//CREA UN ARBOL DE BUSQUEDA CON LOS CARACTERES DE LA CADENA Y REALIZA RECORRIDOS
// EN PREORDEN,ENTREORDEN Y POSTORDEN.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
struct nodoarbol{ //ESTRUCTURA DEL ARBOL
struct nodoarbol *izqnodo;
int info;
struct nodoarbol *dernodo;
};
typedef struct nodoarbol NODO; //DEFINICION DE TIPO NODO
typedef NODO *ARBOL; //DECLARACION DE VARIABLE PUNTERO A NODO
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
void insertanodonuevo(ARBOL *,int); //DECLARACION DE FUNCIONES
void inorden(ARBOL);
void preorden(ARBOL);
void postorden(ARBOL);
void treefree(ARBOL);
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
/*-----------------------<FUNCION PRINCIPAL>--------------------------------*/
main(){
int i; //CONTADOR
char newnod,chain[200],elementos; //DECLARACION DE CADENA,BANDERA Y VARIABLE QUE CONTIENE EL NUEVO VALOR A INSERTAR EN EL ARBOL
clrscr();
ARBOL raiz=NULL; //DECLARACION DE VARIABLE DE TIPO ARBOL
printf("\n\n\tIntroduzca una cadena de caracteres (max. 200 elementos):\n");
gets(chain);
elementos=strlen(chain); //CHECA EL TAMA¥O DE LA CADENA Y ESTABLECE EL NUMERO DE NODOS DEL ARBOL
for(i=1;i<=elementos;i++) {
newnod=chain[i-1];
insertanodonuevo(&raiz,newnod);
}
printf("\n\n preorden ¯¯\t");
preorden(raiz); //LLAMADO A FUNCION DE RECORRIDO EN PREORDEN
printf("\n\n inorden ¯¯\t");
inorden(raiz); //LLAMADO A FUNCION DE RECORRIDO EN INORDEN
printf("\n\n postorden ¯¯\t");
postorden(raiz); //LLAMADO A FUNCION DE RECORRIDO EN POSTORDEN
getch();
treefree(raiz); //LIBERACION DE MEMORIA DEL ARBOL.
raiz=NULL; //ASIGNACION DE UN VALOR NULO A LA RAIZ.
return 0;
}
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
/*-CREA UN NUEVO NODO Y COLOCA LOS VALORES DEL NUEVO ELEMENTO EN LA POSICION CORRESPONDIENTE */
void insertanodonuevo(ARBOL *rarbol,int nuevo){
if(*rarbol==NULL){ //CREACION DE UN NUEVO NODO
*rarbol=(NODO *)malloc(sizeof(NODO));
if(*rarbol!=NULL){
//ASIGNACION DE VALORES NUEVOS EN EL NODO NUEVO
(*rarbol)->info=nuevo;
(*rarbol)->izqnodo =NULL;
(*rarbol)->dernodo=NULL;
}
else{printf("\n¬¬¬¬ Memoria No Disponible !!!!\n");}
}
else
if(nuevo<(*rarbol)->info) //checa si el elemento nuevo es mayor que el elemento padre
insertanodonuevo(&((*rarbol)->izqnodo),nuevo); //coloca el elemento a la izquierda del padre o raiz
else
if(nuevo>(*rarbol)->info) //checa si el elemento nuevo es menor que el elemento padre
insertanodonuevo(&((*rarbol)->dernodo),nuevo);
...