Implementazione albero binario

di il
15 risposte

Implementazione albero binario

Ragazziiiiiii!!! ..Per favore mi date una mano per riuscire ad implementare un albero binario con l'utilizzo delle variabili dinamiche in C++???

..magari c'è già qualcuno che l'ha già fatto...vi prego aiutatemiiiiiii!!!

15 Risposte

  • Re: Implementazione albero binario

    L'hanno fatto su wikipedia.
    http://it.wikipedia.org/wiki/Albero_binari
  • Re: Implementazione albero binario

    Si, l'avevo già visto..sto anche vedendo altri esempi su internet..però il problema è che molte funzioni e istruzioni io non l'ho mai utilizzate! ..per cui per me sembra arabo..

    ..In più odio le funzioni ricorsive..non ho mai capito la loro utilità..!
  • Re: Implementazione albero binario

    E quindi? Vuoi una implementazione che rispechi ciò che tu sai? Gli alberi binari (che sono anche la radice di esplora risorse giusto per informazione) sono fatti in maniera ricorsiva, quindi sotto a studiarli se no, non ne esci.
  • Re: Implementazione albero binario

    Si questo lo so..ma magari se qualcuno mi desse una traccia più comprensibile possibile per me da cui poter cominciare, non sarebbe male...
  • Re: Implementazione albero binario

    OK aspetta allora. Se controlli nel forum di tracce su alberi binari c'è ne sono quanto ne vuoi. Anche la settimana scorsa se ne parlato.
  • Re: Implementazione albero binario

    Ok, ma si è parlato anche proprio della creazione, dell'implementazione e delle visite? ..e comunque se magari il sito mi facesse vedere gli argomenti..! .."the page cannot found"...
  • Re: Implementazione albero binario

    https://www.iprogrammatori.it/forum-programmazione/cplusplus/cancellazione-nodo-albero-binario-t10759.html#p8468819
  • Re: Implementazione albero binario

    Uhm..ok, grazie, vedo di poterci lavorare un pò su questo....vediamo cosa esce fuori..ci aggiorniamo..
  • Re: Implementazione albero binario

    Allora Skynet..ho analizzato quel programma e più o meno il meccanismo mi è chiaro..però devo riuscire a capire una cosa sulle funzioni ricorsive, spero tu possa aiutarmi..
    
    nodo *ins(nodo *root, nodo *nuovo){ //? come mai la funzione è stata dichiarata di tipo puntatore??
        if (root==NULL)
          return nuovo; // return nuovo vuol dire che ci restituisce il valore del nuovo nodo? ma perchè metterlo?
       else{
          
          if (nuovo->ch < root->ch)
             root->sx=ins(root->sx,nuovo); //questa istruzione vuol dire che se il numero del nuovo nodo è minore di quella della root (che sarebbe quello radice), questo verrà puntato dal puntatore sx?
          else
             root->dx=ins(root->dx,nuovo);
             return root; //perchè si mette return root??
       }
    }
    
    void pre_ordine (nodo *a){ //perchè qua lui ha utilizzato il nodo a e non root??
        if(a==NULL)
          return;
       cout<<a->ch;
       if(a->sx!=NULL)
          pre_ordine(a->sx); //questa istruzione, come anche 'pre_ordine(a->dx)', cosa fa sì,           precisamente..?
       if(a->dx!=NULL)
          pre_ordine(a->dx);
       return;
    } 
    
    ..queste ad esempio sono le due funzione relative all'inserimento e alla visita anticipata..i miei dubbi, come puoi vedere, li ho inseriti all'interno del programma come commento.. ..Ti ripeto, io so cosa sono le funzioni ricorsive ma non le utilizzo mai, proprio perchè non ne ho mai capito il funzionamento e l'utilità esatte, pur studiando dai libri o dai siti...
  • Re: Implementazione albero binario

      
    nodo *ins(nodo *root, nodo *nuovo)
    //? come mai la funzione è stata dichiarata di tipo puntatore??
    // perche dopo l'inserimento ciò che a te ritorna è sempre un puntatore all'albero binario
    {
     
            if (root==NULL)
              return nuovo; 
    // return nuovo vuol dire che ci restituisce il valore del nuovo nodo? ma perchè metterlo?
    // significa che se l'albero non esiste, tu ritorni il nodo nuovo come testa dell'albero. 
    // vedi nota sopra (ti serve sempre un puntatore all'albero)
           else{
             
              if (nuovo->ch < root->ch)
                 root->sx=ins(root->sx,nuovo); 
    //questa istruzione vuol dire che se il numero del nuovo nodo è minore di quella della root 
    //(che sarebbe quello radice), questo verrà puntato dal puntatore sx?
    // questa istruzione significa che il nuovo nodo verrà inserito nel ramo sinistro rispetto a root
    // dove verrà inserito si decide dalla chiamata ricorsiva che prende root->sx 
    // come root temporanea per il piazzamento del nodo nuovo
              else
                 root->dx=ins(root->dx,nuovo);
                 return root; 
    //perchè si mette return root??
    // perche il dato è stato inserito e all'uscita della funzione 
    // verrà sempre restituito il puntatore alla testa dell'albero quindi root.
    // sopra hai fatto return di nuovo perche root non esisteva (root == NULL)
           }
        }
    
        void pre_ordine (nodo *a){ 
    // perchè qua lui ha utilizzato il nodo a e non root??
    // lo puoi chiamare come cacchio vuoi fatto sta che fa la stessa roba.
            if(a==NULL)
              return;
           cout<<a->ch;
           if(a->sx!=NULL)
              pre_ordine(a->sx); 
    //questa istruzione, come anche 'pre_ordine(a->dx)', cosa fa sì,           precisamente..?
    // richiama la stessa funzione finche ti ritrovi (a== NULL) e a sto punto stampi il valore del nodo
           if(a->dx!=NULL)
              pre_ordine(a->dx);
           return;
        }
    
  • Re: Implementazione albero binario

    Ok, chiarissimo, grazie.. ..ho dimenticato un'ultima cosa, l'unica cosa che non ti ho chiesto..
     
    if(a==NULL)
              return;
           cout<<a->ch; 
    
    ..queste istruzioni cosa vogliono dire? ..se la radice è uguale a NULL (..che poi in che senso il nodo radice è uguale a NULL??), restituisce solo l'elemento presente nel nodo radice?

    P.s. ..return e cout devo metterli per forza insieme o posso anche fare meno di uno dei due? Cioè, ad esempio, al posto di non visualizzare nulla in caso di aver selezionato la visita anticipata senza però aver fatto inserimenti, non posso visualizzare un messaggio di output? io ci ho provato, mi compare il messaggio, però poi mi spunta la finestra "il programma ha smesso di funzionare"...
  • Re: Implementazione albero binario

    
    if(a==NULL)
              return;
           cout<<a->ch; 
    
    questo non è un codice valido, togli il return è lui che causa casini. pensa che a è radice solo quando ti trovi in una foglia. Tu stai percorrendo l'albero e ti trovi in un nodo che non ha figli, lui è il root di quel piccolo sottoalbero.
  • Re: Implementazione albero binario

    Eppure senza return mi sa che non funziona proprio..!
  • Re: Implementazione albero binario

    Hai ragione stavo confondendo le funzioni.
Devi accedere o registrarti per scrivere nel forum
15 risposte