Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Esercizio Alberi Binari di ricerca

    Per caso qualcuno sa come fare questo esercizio : Assegnato un albero non ordinato di interi scrivere una procedura ricorsiva che trasformi l'albero non ordinato in un albero BST. Determinare l'altezza dell'albero non ordinato e dell'albero BST??
    HELPPPPPP

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Ciao, dovresti dare prima un'occhiata al regolamento (http://forum.html.it/forum/showthrea...hreadid=973887) sia sul titolo che sul contenuto del problema.

  3. #3
    giusto io una prima bozza ce l ho e la scrivo:
    codice:
    void ordina(struct nodo *rad, struct nodo *pr)
    {
         printf("\nINIZIO\n");
         struct nodo *temp=NULL,*prec=NULL; 
         if(rad->sinistro!=NULL  && rad->destro!=NULL)
         {    
              if(rad->info < rad->sinistro->info)
              {
                  temp=(struct nodo *)malloc(sizeof(struct nodo));
                   temp->info=rad->info;
                   rad->info=rad->sinistro->info;
                   rad->sinistro->info=temp->info;
                   free(temp); 
                   ordina(rad,pr);
                   
              }
              
                 if(rad->info > rad->destro->info)
              {
                   temp=(struct nodo *)malloc(sizeof(struct nodo));
                   temp->info=rad->info;
                   rad->info=rad->destro->info;
                   rad->destro->info=temp->info;
                   free(temp);
                   ordina(rad,pr);     
              }
              
              ordina(rad->sinistro,pr);
              ordina(rad->destro,pr);
              if(pr->info < rad->sinistro->info)
              {
             
                   temp=(struct nodo *)malloc(sizeof(struct nodo));
                   temp->info=pr->info;
                   pr->info=rad->sinistro->info;
                   rad->sinistro->info=temp->info;
                   free(temp);
                      ordina(rad->sinistro,pr);
                      ordina(rad->destro,pr);
                      
                   }
                else if(pr->info > rad->destro->info)
                 {
                             temp=(struct nodo *)malloc(sizeof(struct nodo));
                             temp->info=pr->info;
                             pr->info=rad->destro->info;
                             rad->destro->info=temp->info;
                             free(temp);
                             ordina(rad->sinistro,pr);
                              ordina(rad->destro,pr);
                             }
                  
                  else
                   {
                      ordina(rad->sinistro,pr);
                      ordina(rad->destro,pr);
                      }   
           
                   }      
    }
    il problema e che quando entro nella parte destra dell albero e vado a cercare l elemento minore della radice siccome ho laa condizione chegli elementi del sottoalbero sinistro devono essere minore della radice non mi fa lo scambio,non so se sono stato chiaro ma nel caso in cui qualcuno abbia capito come posso risolvere questo problema?

  4. #4

    Moderazione

    Stiamo parlando di C o C++? Puoi postare la dichiarazione di struct nodo?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Parliamo del C

    La mia struttura e:

    struct nodo
    {
    int info;
    struct nodo *sinistro,*destro;
    };

  6. #6
    Originariamente inviato da angelodap
    Parliamo del C
    Ok, aggiungo il tag al titolo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Ragazzi allora?nessuno aiuto?il mio problema e come scorrere gli alberi binari non ordinati,mi date una mano pleaseeee!

  8. #8
    Questa funzione, stampa le informazioni di ogni nodo una sola volta, percorrendo l'albero in maniera ricorsiva.

    codice:
    void showtree( struct nodo *n )
    {
        if ( n -> sinisto != NULL )
                showtree(n->sinistro);
        printf("%d ", n->info);
        
        if ( n -> destro != NULL )
                showtree(n->destro);
    }
    Naturalmente anziché stampare l'informazione, ci puoi fare ciò che vuoi!

  9. #9
    Ti ringrazio tantissimo per la risp,ma hai un idea di come svolgere quell esercizio??mi puoi dare una strada da intreprendere o farmi capire come ragionare per questo esercizio??

  10. #10
    Beh, se vuoi una strada da interpretare, sappi che alla voce Albero binario su Wikipedia; v'è un programma esempio scritto in c, ben commentato, contenente le definizioni di numerose funzioni utili per lavorare con gli alberi. Anzi posso affermare che in quell'esempio c'è tutto ciò che ti serve, devi solo interpretare.

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