Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Salvare il percordo di una ricerca in un albero binario
Forum - C/C++ - Salvare il percordo di una ricerca in un albero binario

Avatar
-tonix (Normal User)
Newbie


Messaggi: 6
Iscritto: 13/05/2011

Segnala al moderatore
Postato alle 12:15
Venerdė, 27/01/2012
Salve, sto scrivnedo un programma per la codifica di Huffman. Ho creato l'albero binario e adesso devo cercare carattere per carattere e salvarmi il percorso per riformare la parola (la stringa di bit)

Sono partito sulla base di una visita preorder, ma la codifica mi utilizza piu bit del previsto..

Codice sorgente - presumibilmente C++

  1. bool ver=false; //variabile globale che mi serve per uscire dalla ricerca quando trovo il carattere cercato.
  2.  
  3. void preorder_ric (ELEMENTO *ptr, vector <int> &bit, int rad, char chiave) //funzione di letura preorder ricorsiva
  4. {
  5.          if(ptr!=NULL && ver==false)
  6.          {
  7.               cout<<ptr->visualizza_char()<<ptr->visualizza_freq()<<endl;
  8.               system("pause");
  9.               if((ptr->visualizza_char())==chiave) ver=true;
  10.    
  11.               if(ptr->visualizza_left()!=NULL && ver==false) //se il nodo corrente ha un figlio sinistro..
  12.               {
  13.                    bit.push_back(0); //aggiorno il percorso con uno 0
  14.                    preorder_ric(ptr->visualizza_left(),bit,rad,chiave); //e lo vado a visitare
  15.               }
  16.               if(ver==false)
  17.               {
  18.               bit.erase(bit.begin()+bit.size()-1); //se invece il nodo corrente non ha figlio sinistro elimino l'ultimo spostamento
  19.               if(ptr->visualizza_freq()==rad) bit.pop_back(); //se mi trovo alla radice azzero il percorso
  20.               bit.push_back(1); //aggiorno il percorso con 1
  21.               preorder_ric(ptr->visualizza_right(),bit,rad,chiave); //vado a visitare il figlio destro
  22.               }
  23.          }
  24.  
  25. }



L'errore credo riguardi gli spostamenti a destra..

Grazie per eventuali consigli

PM Quote