Escribir una funcion recursiva que encuentre la altura de un arbol binario... ..

Iniciado por juancarlossoma, 6 Junio 2012, 06:30 AM

0 Miembros y 1 Visitante están viendo este tema.

juancarlossoma

Buena noche comunidad e elhacker... cargo un codigo en este for para preguntar como puedo complementar este codigo para que sea recursivo y encuentre la altura de un arbol... agradecería muccho su información . ...
#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;                         
char newnod,chain[200],elementos;   
ARBOL raiz=NULL;               
printf("\n\n\t\t INGRESE DATOS PARA CREAR ARBOL BINARIO:  \n"); //MAXIMO DE CARACTERES 200
printf("\n\t\t"); gets(chain);
elementos=strlen(chain);   
for(i=1;i<=elementos;i++)  {
       newnod=chain[i-1];
     insertanodonuevo(&raiz,newnod);
}
printf("\n\n preorden ¯¯\t");
preorden(raiz);               
printf("\n\n inorden  ¯¯\t");
inorden(raiz);                 
printf("\n\n postorden ¯¯\t");
postorden(raiz);                //LLAMADO A FUNCION DE RECORRIDO EN POSTORDEN
getch();
treefree(raiz);           
raiz=NULL;   
return 0;
}

void insertanodonuevo(ARBOL *rarbol,int nuevo){
if(*rarbol==NULL){                         
*rarbol=(NODO *)malloc(sizeof(NODO));
if(*rarbol!=NULL){
(*rarbol)->info=nuevo;
(*rarbol)->izqnodo =NULL;
(*rarbol)->dernodo=NULL;
}
else{printf("\n­­­­ Memoria No Disponible !!!!\n");}
}
else
   if(nuevo<(*rarbol)->info)
      insertanodonuevo(&((*rarbol)->izqnodo),nuevo); 
   else
      if(nuevo>(*rarbol)->info) 
         insertanodonuevo(&((*rarbol)->dernodo),nuevo); 
}
void preorden(ARBOL rarbol){
if(rarbol!=NULL){
printf(" %c ",rarbol->info);
preorden(rarbol->izqnodo);
preorden(rarbol->dernodo);

}
}
void inorden(ARBOL rarbol){
if(rarbol!=NULL){
inorden(rarbol->izqnodo);
printf(" %c ",rarbol->info);
inorden(rarbol->dernodo);

}

}
void postorden(ARBOL rarbol){
if(rarbol!=NULL){
postorden(rarbol->izqnodo);
postorden(rarbol->dernodo);
printf(" %c ",rarbol->info);
}
}
void treefree(ARBOL rarbol){
if(rarbol!=NULL){
treefree(rarbol->izqnodo);
treefree(rarbol->dernodo);
free(rarbol);
}
}
:-(      :laugh:

caldera_titin

La altura de un arbol? mmm.. no entiendo el contexto que lo nesecita, pero para calcular la altura de cualquier cosa puedes usar el seno de la funcion dependiendo de el angulo que forma una linea imaginaria con la sombra
"Solo estas tu y yo, tenemos 2 panes, tu te comes 2 y yo ninguno... ¿cual es el promedio? 1 pan por persona..."


do-while

¡Buenas!

Es muy facil. Tendras que tener una funcion que reciba un puntero a arbol. Si el puntero es nulo devuelve 0, sino devolveras 1 + maximo de las alturas de las ramas izquierda y derecha. (Si, creo que si). La implementacion te toca a ti.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

juancarlossoma

Podría alguien ayudarme a como hacer esa función ya implementada,  pues ya llevo varias noches probando sobre.. como implementar el calculo de la altura de este arbol  ;-)