HuffmanDecompress.cpp
上传用户:gzrichone
上传日期:2021-04-24
资源大小:1k
文件大小:2k
- #include <iostream.h>
- #include <string.h>
- #include <math.h>
- struct Node
- {
- Node *left;
- Node *right;
- };
- /*****************************************************/
- Node *HuffmanTree;
- int HuffmanTreeHeight = 4;
- char *bitBuffer = "100100001000000000010000000000";
- /****************************************************/
- Node *createNode()
- {
- Node *newNode = new Node;
- newNode->right = NULL;
- newNode->left = NULL;
- return newNode;
- }
- void createHuffmanTree(Node *Tree, char *buffer, int *bufferIndex, int level)
- {
- if (Tree == NULL)
- {
- *bufferIndex += (int)pow(2, (level + 1));
- return;
- }
- if (level == 0)
- {
- if (buffer[(*bufferIndex)++] == '1')
- Tree->left = createNode();
- if (buffer[(*bufferIndex)++] == '1')
- Tree->right = createNode();
- }
- else
- {
- createHuffmanTree(Tree->left, buffer, bufferIndex, level - 1);
- createHuffmanTree(Tree->right, buffer, bufferIndex, level - 1);
- }
- }
- void createHuffmanTree(Node *Tree, int TreeHeight, char *buffer)
- {
- int bufferIndex = 0;
- for (int level = 0; level < TreeHeight; level++)
- createHuffmanTree(Tree, buffer, &bufferIndex, level);
- }
- void traverseLevel(Node *Tree, int level)
- {
- if (Tree == NULL)
- {
- int numberOfZeros = (int)pow(2, (level + 1));
- for (int i = 0; i < numberOfZeros; i++)
- cout << "0 ";
- return;
- }
- if (level == 0)
- {
- cout << ((Tree->left == NULL) ? "0 " : "1 ");
- cout << ((Tree->right == NULL) ? "0 " : "1 ");
- }
- else
- {
- traverseLevel(Tree->left, level - 1);
- traverseLevel(Tree->right, level - 1);
- }
- }
- void traverseTree(Node *tree, int treeHeight)
- {
- for (int level = 0; level < treeHeight; level++)
- {
- traverseLevel(tree, level);
- cout << endl;
- }
- }
- int main()
- {
- HuffmanTree = createNode();
- createHuffmanTree(HuffmanTree, HuffmanTreeHeight, bitBuffer);
- traverseTree(HuffmanTree, HuffmanTreeHeight);
- return 0;
- }