Curso 2023/2024
#include <algorithm> // reverse #include <stdexcept> // out_of_range string Huffman::codificar(const string & mensaje) const { string mensajeCodificado, caracterCodificado; Nodo * n; for (char caracter : mensaje) { try { n = hojas.at(caracter); } catch(out_of_range e) { throw string("El mensaje a codificar contiene algun caracter que no estaba ") + string("en la tabla de frecuencias inicial (") + caracter + ")."; } caracterCodificado = ""; while (n->padre != nullptr) { // Equivale a while (n != raiz) caracterCodificado += n->bit; // Valdria caracterCodificado = n->bit + caracterCodificado pero seria menos eficiente // Por eso usamos asi += y despues invertimos la cadena con reverse n = n->padre; } reverse(caracterCodificado.begin(), caracterCodificado.end()); mensajeCodificado += caracterCodificado; } return mensajeCodificado; }
Observa que el atributo bit
del nodo raíz no se utiliza.