Beispiel #1
0
void generateCodes(const iNode *node, const HuffCode &prefix, HuffCodeMap &outCodes){
	if (const leafNode *lf = dynamic_cast<const leafNode*>(node))
		outCodes[lf->c] = prefix;
	else if (const intNode *in = dynamic_cast<const intNode*>(node)){
		HuffCode leftPrefix = prefix; 
		leftPrefix.push_back(false);
		generateCodes(in->left, leftPrefix, outCodes);

		HuffCode rightPrefix = prefix;
		rightPrefix.push_back(true);
		generateCodes(in->right, rightPrefix, outCodes);
	}
}
Beispiel #2
0
void GenerateCodes(const INode* node, const HuffCode& prefix, HuffCodeMap& outCodes)
{
    if (const LeafNode* lf = dynamic_cast<const LeafNode*>(node))
    {
        outCodes[lf->c] = prefix;
    }
    else if (const InternalNode* in = dynamic_cast<const InternalNode*>(node))
    {
        HuffCode leftPrefix = prefix;
        leftPrefix.push_back(false);
        GenerateCodes(in->left, leftPrefix, outCodes);

        HuffCode rightPrefix = prefix;
        rightPrefix.push_back(true);
        GenerateCodes(in->right, rightPrefix, outCodes);
    }
}