diff --git a/Huffman Coding b/Huffman Coding new file mode 100644 index 0000000..27bf389 --- /dev/null +++ b/Huffman Coding @@ -0,0 +1,70 @@ +#include +#include +using namespace std; + +struct MinHeapNode +{ + char number; + unsigned freq; + MinHeapNode *left, *right; + MinHeapNode(char number, unsigned freq) + { + left = right = NULL; + this->number = number; + this->freq = freq; + } +}; +struct compare { + bool operator()(MinHeapNode* l, MinHeapNode* r) + { + return (l->freq > r->freq); + } +}; +void printCodes(struct MinHeapNode* root, string code) +{ + + if (!root) + return; + + if (root->number != '$') + cout << root->number<< ": "<left,code+"0"); + printCodes(root->right,code+"1"); +} +void Huffman(char number[], int freq[], int size) +{ + struct MinHeapNode *left, *right, *top; + priority_queue, compare> minHeap; + + for (int i = 0; i < size; ++i) + minHeap.push(new MinHeapNode(number[i], freq[i])); + while (minHeap.size() != 1) + { + left = minHeap.top(); + minHeap.pop(); + + right = minHeap.top(); + minHeap.pop(); + top = new MinHeapNode('$', left->freq + right->freq); + + top->left = left; + top->right = right; + + minHeap.push(top); + } + printCodes(minHeap.top(), ""); +} + +int main() +{ + + char img[] = {'0','1','2','3','4','5','6','7'}; + int freq[] = {1,4,2,3,2,12,10,2}; + + int size = sizeof(img) / sizeof(img[0]); + + Huffman(img, freq, size); + + return 0; +}