Foro de elhacker.net

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!

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. typedef struct arbol{
  6. int dato;
  7. struct arbol *der;
  8. struct arbol *izq
  9. }treenode;
  10.  
  11. void crear(treenode **arb);
  12. void mostrarOrden (treenode *hoja);
  13. void mostrarPreorden(treenode *hoja);
  14. void mostrarPosorden(treenode *hoja);
  15. int contarNodosHoja(treenode *p);
  16. int sumarMultiplosDeCuatro(treenode *p);
  17. treenode *primerNodo(treenode *hoja);
  18. int sumatoriaImparesRaiz(treenode *p, int raiz);
  19. int contarImparesRaiz(treenode *p, int raiz);
  20. void insertar(treenode **hoja,int num);
  21. int maximo(treenode *p);
  22. int main(){
  23.  
  24.    treenode *arb=NULL;
  25.    int max=0;
  26.  
  27.  
  28.  
  29.    crear(&arb);
  30.  
  31.  
  32.    printf("\nMuestra En Orden\n");
  33.    mostrarOrden (arb);
  34.    printf("\nMuestra En PreOrden\n");
  35.    mostrarPreorden(arb);
  36.    printf("\nMuestra En PosOrden\n");
  37.    mostrarPosorden(arb);
  38.  
  39.    max=maximo(arb);
  40.    printf("\Maximo: %d\n",max);
  41.  
  42.  
  43. }
  44. //Crea el Arbol
  45. void crear(treenode **hoja){
  46.    int num;
  47.    printf("Ingrese Numero: ");
  48.    scanf("%d",&num);
  49.  
  50.    while(num!=-1){
  51.        insertar(&(*hoja),num);
  52.        printf("Ingrese Numero: ");
  53.        scanf("%d",&num);
  54.    }
  55. }
  56. //Inserta Hoja al Arbol
  57. void insertar(treenode **hoja,int num){
  58.    if(num==-1){
  59.       return;
  60.    }
  61.    if(*hoja==NULL){
  62.        (*hoja)=(treenode*)malloc(sizeof(treenode));
  63.        (*hoja)->dato=num;
  64.        (*hoja)->der=NULL;
  65.        (*hoja)->izq=NULL;
  66.    }else{
  67.        //Si el Numero es Mayor va a la Derecha
  68.        if(num>(*hoja)->dato){
  69.            insertar(&(*hoja)->der,num);
  70.        }else{
  71.            insertar(&(*hoja)->izq,num);
  72.        }
  73.    }
  74.    return;
  75. }
  76. //Mostrar en orden (Izquierda - Raiz - Derecha)
  77. void mostrarOrden (treenode *hoja){
  78.    if (hoja!=NULL){
  79.        mostrarOrden(hoja->izq);
  80.        printf("%d ",hoja->dato);
  81.        mostrarOrden(hoja->der);
  82.    }
  83.    return;
  84. }
  85. //Mostrar en preOrden (Raiz - Izquierda - Derecha)
  86. void mostrarPreorden(treenode *hoja){
  87.    if (hoja!=NULL){
  88.        printf("%d ",hoja->dato);
  89.        mostrarPreorden(hoja->izq);
  90.        mostrarPreorden(hoja->der);
  91.    }
  92.    return;
  93. }
  94. //mostrar en posOrden (Izquierda - Derecha - Raiz)
  95. void mostrarPosorden(treenode *hoja){
  96.    if (hoja!=NULL){
  97.        mostrarPosorden(hoja->izq);
  98.        mostrarPosorden(hoja->der);
  99.        printf("%d ",hoja->dato);
  100.    }
  101.    return;
  102. //Funcion Maximo
  103. int maximo(treenode *p){
  104.  
  105.     if(p==NULL){
  106.         return -99;
  107.     }else{
  108.        int temp ;
  109.        temp=max( maximo(p->izq), maximo(p->der));
  110.        return(  max( p->dato , temp ) );
  111.      }
  112. }
  113. }

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!