DecodingTree* Huffman::obtainSubtree(uint symbol, uint k) { BinaryNode *node = tree; // Traversing the Huffman tree for (uint i=1; i<=k; i++) { bool bit = ((symbol >> (k-i)) & 1); if (bit == 0) node = node->leftChild; else node = node->rightChild; } // Retrieving the subtree vector<uint> xTree; vector<uint> symbols; uint bits = 0; retrieveSubtree(node, &xTree, &bits, &symbols); BitString *tree = new BitString(2*xTree.size()); for (uint i=0; i<xTree.size(); i++) tree->setBit(xTree[i]); return new DecodingTree(symbol, tree, &symbols); }
pair<BitString *,uint> generateBitmap(size_t length,vector<pair<uint,uint> > &nodes ) { uint bitmap_pos = 0; BitString *bitmap = new BitString(length); size_t a,b; cst->Root(&a,&b); bitmap_pos++; // cout << "(" ; generateBitmapAux(make_pair(a,b),bitmap,bitmap_pos,nodes); bitmap->setBit(bitmap_pos); bitmap_pos++; // cout << ")"; // cout << "nodes.size() = " << nodes.size() << endl; BitString *new_bitmap = new BitString(bitmap->getData(),bitmap_pos); // for (int i = 0 ; i < nodes.size();i++) { // cout << nodes[i].first << endl; // } // cout << "=========== tree ==========" << endl; // for (int i = 0 ;i < bitmap_pos;i++) { // if (bitmap->getBit(i)) // cout << ")"; // else // cout << "("; // } // cout << endl; return make_pair(new_bitmap,bitmap_pos); }