Minimo Valor y Maximo Valor de Un Arbol

Iniciado por Jupiter34, 16 Noviembre 2012, 16:26 PM

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

Jupiter34

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!

Jupiter34

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!