Oppure

Loading
27/01/12 11:15
-tonix
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..

bool ver=false; //variabile globale che mi serve per uscire dalla ricerca quando trovo il carattere cercato.

void preorder_ric (ELEMENTO *ptr, vector <int> &bit, int rad, char chiave) //funzione di letura preorder ricorsiva
{
         if(ptr!=NULL && ver==false)
         {
              cout<<ptr->visualizza_char()<<ptr->visualizza_freq()<<endl;
              system("pause");
              if((ptr->visualizza_char())==chiave) ver=true;
   
              if(ptr->visualizza_left()!=NULL && ver==false) //se il nodo corrente ha un figlio sinistro..
              {
                   bit.push_back(0); //aggiorno il percorso con uno 0
                   preorder_ric(ptr->visualizza_left(),bit,rad,chiave); //e lo vado a visitare
              }
              if(ver==false)
              {
              bit.erase(bit.begin()+bit.size()-1); //se invece il nodo corrente non ha figlio sinistro elimino l'ultimo spostamento
              if(ptr->visualizza_freq()==rad) bit.pop_back(); //se mi trovo alla radice azzero il percorso
              bit.push_back(1); //aggiorno il percorso con 1
              preorder_ric(ptr->visualizza_right(),bit,rad,chiave); //vado a visitare il figlio destro
              }
         }

}


L'errore credo riguardi gli spostamenti a destra..

Grazie per eventuali consigli
aaa