Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    65

    [C] cercare il minimo in un albero binario semplice

    Ciao a tutti. Ho il seguente problema. Dato un albero binario semplice(cioè non un albero binario di ricerca)devo cercare il minimo usando una funzione ricorsiva.
    codice:
    int minimo(nod *radice, int conf)
    {
     int min1,min2;
     if (radice!=NULL)
       {
         if(radice->info<conf)
           conf=radice->info;
         min1=minimo(radice->sinistro,conf);
         min2=minimo(radice->destro,conf);
         if (min1<min2)
           return min1;
         else
           return min2;
       }  
    }
    Conf lo inizializzo nel main ad un valore piu grande che non potrei mai inserire nel albero.
    Utlizzo due variabili min1 e min2 rispettivamente minimo di sinistra e minimo di destra. Li confronto è il valore piu piccolo sarà il minimo del albero.
    Invece mi restitutisce sempre valori sballati. Qualcuno saprebbe aiutarmi???

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Guarda ho provato a farlo in uno stato di morte apparente, fai un po' due prove anche se comunque dovrebbe andare (INT_MAX è una costante definita in limits.h; la funzione min serve a trovare il minimo tra tre numeri, volendo si può riscrivere con una semplice sequenza di if-then-else, e può essere anche una macro).

    codice:
    int min(int a, int b, int c)
    {
        return a < b ? (a < c ? a : c) : (b < c ? b : c);
    }
    
    int tree_min(node *root)
    {
        /* empty node */
        if (root == NULL) {
            return INT_MAX;
        }
    
        /* leaf node */
        if (root->sx == NULL && root->dx == NULL) {
            return root->info;
        }
        
        return min(tree_min(root->sx), tree_min(root->dx), root->info);
    }
    dove la struttura del nodo si può dedurre facilmente:

    codice:
    typedef struct node {
        int info;
        struct node *sx;
        struct node *dx;
    } node;
    Alla fine poteva andare bene anche come l'hai fatta tu, solo che avresti dovuto innanzitutto restituire qualcosa anche nel "caso base", cioè quando la radice è NULL (altrimenti la funzione restituisce valori "casuali" essendo comunque di tipo int) e poi il confronto finale andrebbe fatto appunto a tre (comprendendo conf), non solo tra min1 e min2.
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.