Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16
  1. #11
    Originariamente inviato da kafley non trova il NULL che dovrebbe trovarsi come figlio delle foglie
    Controlla se fai bene l'inserimento, che il problema non è nella lettura come detto prima

  2. #12
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    14
    sono pronto a scommettere che non hai passato la variabile i come puntatore di un intero inizializzato a 0 (se è così leggi bene la prossima volta per favore )

    cmq da questa prova si capisce che il mio script funziona benissimo... confrontalo a come lo hai scritto tu

    facci sapere!

    (spero non sia un esercizio delle vacanze)

    codice:
    #include <stdio.h>
    #define MAXARRAY 3
    
    typedef struct node
    {
    int inf;
    struct node *sx, *dx;
    } * nodo;
    
    nodo costruisci(int info, nodo sin, nodo des)
    {
     nodo v = malloc(sizeof(struct node));
     v->inf=info;
     v->sx=sin;
     v->dx=des;
     return v;
    }
    
    void stampalbero(nodo radice)
    {
    if (radice==NULL) return;
    stampalbero(radice->sx);
    printf("%d ",radice->inf);
    stampalbero(radice->dx);
    }
    
    void stamparry(int array[])
    {
    int i;
    for(i=0;i<MAXARRAY;i++) printf("%d ",array[i]);
    }
    
    void copia(int array[],nodo rad,int *i)
    {
    if (rad==NULL) return;
    copia(array,rad->sx,i);
    array[(*i)++]=rad->inf;
    copia(array,rad->dx,i);
    }
    
    main()
    {
    nodo figlio1=costruisci(2,NULL,NULL);
    nodo figlio2=costruisci(6,NULL,NULL);
    nodo radice=costruisci(4,figlio1,figlio2);
    printf("Stampa dell'albero:\t");
    stampalbero(radice);
    
    printf("\n...e fin qui tutto ok\nStampa dell'array:\t");
    int array[MAXARRAY];
    int i=0;
    copia(array,radice,&i);
    stamparry(array);
    printf("\n...e qui ancora tutto ok\n");
    }

  3. #13
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    65
    il codice che io uso per l inserimento dei valori in un albero binario di ricerca e che ho sempre usato in altri esercizi riusciti é:

    codice:
    #include <stdio.h>
    #include <malloc.h>
    typedef struct nodo
       {
         int info;
         struct nodo  *sinistro;
         struct nodo  *destro;
       }nod;
    
    int vuoto(nod *rad)
    {
     if(rad)/*rad == NULL*/
       return 0;/*albero vuoto*/
     else 
       return 1;/*albero non vuoto*/
    }
    
    Secondo voi è sbagliato?
    nod *inserisci(nod *punt,int numero)
    {
      if (vuoto(punt))/*se punt==NULL*/
        {
          punt=(nod*)malloc(sizeof(nod));/*inserimento valore*/
          punt->info=numero;
          punt->sinistro=NULL;
          punt->destro=NULL;
        }
      else
        {
          if (numero>punt->info)/*scorriamo a destra*/
             {
              printf("inseriamo a destra di %d \n",punt->info);
              punt->destro=inserisci(punt->destro,numero);
             } 
          else  /*scorriamo a sinistra*/   
            {
             printf("inseriamo a sinistra di %d \n",punt->info);   
             punt->sinistro=inserisci(punt->sinistro,numero);
            } 
        }
      printf("valore di punt uguale a %d \n",punt->info);  
      return punt;       
    }
    nod *crea_albero()
    {
     int val;
     nod *p;
     p=NULL;
     do
      {
        printf("INSERIRE VALORE : \n");
        scanf("%d", &val);   
        if (val!=0)     /*possiamo inserire il valore*/
          p=inserisci(p,val);
       }
     while (val!=0);
     return p;  
    }
    
    void visita_in_ordine(nod *radice)
    {
      if(radice!=NULL) 
        { 
          visita_in_ordine(radice->sinistro);
          printf("%d ",radice->info);
          visita_in_ordine(radice->destro);
        }    
    }
    
    int main()
    {
      nod *rad;
      printf("creazione ALBERO \n");
      rad=crea_albero();
      printf("VISITA IN ORDINE :\n ");
      visita_in_ordine(rad);
      printf("\n");
      system("PAUSE");
    }

  4. #14
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    14
    il codice ha un problema nel controllare se l'albero è vuoto
    cmq tanto per essere sicuro... hai capito come risolvere il tuo problema?
    prima ho postato un intero esempio di come potresti fare per risolverlo e ti ho anche scritto due righe sopra per eventuali chiarimenti. le hai lette?

    EDIT:
    per migliorare la tua libreria potresti riscrivere la funzione vuoto così:
    codice:
    int vuoto(nod *rad)
    {
     return (rad==NULL)
    }
    restituisce 1 se l'albero è vuoto
    restituisce 0 se l'albero non è vuoto

  5. #15
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    65
    grazie funziona l esercizio. sbagliavo quando andavo ad inizializzare i nel main. Cioè dichiaravo i come puntatore ad intero. grazie di nuovo

  6. #16
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    14
    di nulla!
    son contento di averti aiutato... cmq volevo fare notare un'altra differenza:
    io ho definito il tipo di nodo con typedef struct nodo * nod, già puntatore... per questo nelle funzioni non ci metto mai * come hai fatto tu

    ciao

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 © 2026 vBulletin Solutions, Inc. All rights reserved.