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..
L'errore credo riguardi gli spostamenti a destra..
Grazie per eventuali consigli
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