Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Jupiter34 en 16 Noviembre 2012, 16:26 PM

Título: Minimo Valor y Maximo Valor de Un Arbol
Publicado por: Jupiter34 en 16 Noviembre 2012, 16:26 PM
Estimados,

Intengo encontrar el maximo valor, de un arbol, pero algo hago mal...Eh tratado de adaptar codigo, pero no estoy entendiendo...Me dan una mano? Muchas gracias!

#include <stdio.h>
#include <stdlib.h>


typedef struct arbol{
int dato;
struct arbol *der;
struct arbol *izq
}treenode;

void crear(treenode **arb);
void mostrarOrden (treenode *hoja);
void mostrarPreorden(treenode *hoja);
void mostrarPosorden(treenode *hoja);
int contarNodosHoja(treenode *p);
int sumarMultiplosDeCuatro(treenode *p);
treenode *primerNodo(treenode *hoja);
int sumatoriaImparesRaiz(treenode *p, int raiz);
int contarImparesRaiz(treenode *p, int raiz);
void insertar(treenode **hoja,int num);
int maximo(treenode *p);
int main(){

    treenode *arb=NULL;
    int max=0;
   


    crear(&arb);


    printf("\nMuestra En Orden\n");
    mostrarOrden (arb);
    printf("\nMuestra En PreOrden\n");
    mostrarPreorden(arb);
    printf("\nMuestra En PosOrden\n");
    mostrarPosorden(arb);

    max=maximo(arb);
    printf("\Maximo: %d\n",max);


}
//Crea el Arbol
void crear(treenode **hoja){
    int num;
    printf("Ingrese Numero: ");
    scanf("%d",&num);

    while(num!=-1){
        insertar(&(*hoja),num);
        printf("Ingrese Numero: ");
        scanf("%d",&num);
    }
}
//Inserta Hoja al Arbol
void insertar(treenode **hoja,int num){
    if(num==-1){
       return;
    }
    if(*hoja==NULL){
        (*hoja)=(treenode*)malloc(sizeof(treenode));
        (*hoja)->dato=num;
        (*hoja)->der=NULL;
        (*hoja)->izq=NULL;
    }else{
        //Si el Numero es Mayor va a la Derecha
        if(num>(*hoja)->dato){
            insertar(&(*hoja)->der,num);
        }else{
            insertar(&(*hoja)->izq,num);
        }
    }
    return;
}
//Mostrar en orden (Izquierda - Raiz - Derecha)
void mostrarOrden (treenode *hoja){
    if (hoja!=NULL){
        mostrarOrden(hoja->izq);
        printf("%d ",hoja->dato);
        mostrarOrden(hoja->der);
    }
    return;
}
//Mostrar en preOrden (Raiz - Izquierda - Derecha)
void mostrarPreorden(treenode *hoja){
    if (hoja!=NULL){
        printf("%d ",hoja->dato);
        mostrarPreorden(hoja->izq);
        mostrarPreorden(hoja->der);
    }
    return;
}
//mostrar en posOrden (Izquierda - Derecha - Raiz)
void mostrarPosorden(treenode *hoja){
    if (hoja!=NULL){
        mostrarPosorden(hoja->izq);
        mostrarPosorden(hoja->der);
        printf("%d ",hoja->dato);
    }
    return;
//Funcion Maximo
int maximo(treenode *p){
   
     if(p==NULL){
         return -99;
     }else{
        int temp ;
        temp=max( maximo(p->izq), maximo(p->der));
        return(  max( p->dato , temp ) );
      }
}
}


Si alguno tiene una idea, del por que no encuentra el dato y me entrega basura...voy a estar mas que agradecido! Saludos a todos!
Título: Re: Minimo Valor y Maximo Valor de Un Arbol
Publicado por: Jupiter34 en 16 Noviembre 2012, 18:17 PM
Hecho!

//Maximo Nodo
int maxNodo(treenode *p){

    if(p==NULL){
        return -1;
    }else{
        if(p->der==NULL){
            return p->dato;
        }else{
            return maxNodo(p->der);
        }

    }

}
//MIN NODO
int minNodo(treenode *p){

    if(p==NULL){
        return -1;
    }else{
        if(p->izq==NULL){
            return p->dato;
        }else{
            return minNodo(p->izq);
        }

    }

}

Por las que alguien lo necesite!