HuffmanDecompress.cpp
上传用户:gzrichone
上传日期:2021-04-24
资源大小:1k
文件大小:2k
源码类别:

压缩解压

开发平台:

C/C++

  1. #include <iostream.h>
  2. #include <string.h>
  3. #include <math.h>
  4. struct Node
  5. {
  6. Node *left;
  7. Node *right;
  8. };
  9. /*****************************************************/
  10. Node *HuffmanTree;
  11. int HuffmanTreeHeight = 4;
  12. char *bitBuffer = "100100001000000000010000000000";
  13. /****************************************************/
  14. Node *createNode()
  15. {
  16. Node *newNode = new Node;
  17. newNode->right = NULL;
  18. newNode->left = NULL;
  19. return newNode;
  20. }
  21. void createHuffmanTree(Node *Tree, char *buffer, int *bufferIndex, int level)
  22. {
  23. if (Tree == NULL)
  24. {
  25. *bufferIndex += (int)pow(2, (level + 1));
  26. return;
  27. }
  28. if (level == 0)
  29. {
  30. if (buffer[(*bufferIndex)++] == '1')
  31. Tree->left = createNode();
  32. if (buffer[(*bufferIndex)++] == '1')
  33. Tree->right = createNode();
  34. }
  35. else
  36. {
  37. createHuffmanTree(Tree->left, buffer, bufferIndex, level - 1);
  38. createHuffmanTree(Tree->right, buffer, bufferIndex, level - 1);
  39. }
  40. }
  41. void createHuffmanTree(Node *Tree, int TreeHeight, char *buffer)
  42. {
  43. int bufferIndex = 0;
  44. for (int level = 0; level < TreeHeight; level++)
  45. createHuffmanTree(Tree, buffer, &bufferIndex, level);
  46. }
  47. void traverseLevel(Node *Tree, int level)
  48. {
  49. if (Tree == NULL)
  50. {
  51. int numberOfZeros = (int)pow(2, (level + 1));
  52. for (int i = 0; i < numberOfZeros; i++)
  53. cout << "0 ";
  54. return;
  55. }
  56. if (level == 0)
  57. {
  58. cout << ((Tree->left == NULL) ? "0 " : "1 ");
  59. cout << ((Tree->right == NULL) ? "0 " : "1 ");
  60. }
  61. else
  62. {
  63. traverseLevel(Tree->left, level - 1);
  64. traverseLevel(Tree->right, level - 1);
  65. }
  66. }
  67. void traverseTree(Node *tree, int treeHeight)
  68. {
  69. for (int level = 0; level < treeHeight; level++)
  70. {
  71. traverseLevel(tree, level);
  72. cout << endl;
  73. }
  74. }
  75. int main()
  76. {
  77. HuffmanTree = createNode();
  78. createHuffmanTree(HuffmanTree, HuffmanTreeHeight, bitBuffer);
  79. traverseTree(HuffmanTree, HuffmanTreeHeight);
  80. return 0;
  81. }