void HuffmanTree::writeTree( TreeNode * current, BinaryFileWriter & bfile ) { /** * @todo Your code here! * * This code is writing the current HuffmanTree in a compressed format * to the given BinaryFileWriter. The strategy for doing so is as * follows: * 1. If we are a leaf node, write the bit "1" followed by the * byte that is the character of this node. * 2. If we are an internal node, writ the bit "0", and then * encode the left and right subtree, recursively. * * Note that we don't encode the frequencies in this compressed * version: this is fine, as the structure of the tree still reflects * what the relative frequencies were. */ if (current->left == NULL && current->right == NULL) { bfile.writeBit(1); bfile.writeByte(current->freq.getCharacter()); } else { bfile.writeBit(0); writeTree(current->left, bfile); writeTree(current->right, bfile); } }
void HuffmanTree::writeToFile( char c, BinaryFileWriter & bfile ) { vector<bool> bits = getBitsForChar( c ); for( auto it = bits.begin(); it != bits.end(); ++it ) bfile.writeBit( *it ); }