-tonix (Normal User)
Newbie
Messaggi: 6
Iscritto: 13/05/2011
|
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++ |
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
|