📄 huffman.h
字号:
#include <cstring>
#include <iostream>
#include "TreeNode.h"
#include "MinHeap.h"
using namespace::std;
class HuffmanTree{
public:
HuffmanTree():root(NULL) {}
HuffmanTree(int value[], int n);
~HuffmanTree() {delete []nodes;}
public:
void Encode(TreeNode *t);
void HuffmanEncode();
public:
TreeNode *JoinTree(TreeNode *node1, TreeNode *node2);
TreeNode *root;
TreeNode *nodes;
};
HuffmanTree::HuffmanTree(int value[],int n):root(NULL)
{
nodes = new TreeNode[n*2];
TreeNode leftNode,rightNode;
int i, j = 0;
TreeNode *l;
MinHeap m_heap(value, n);
if(1 > n) root = NULL;
root = m_heap.RemoveMin();
for(i = 0; i < n - 1; i++)
{
/*nodes[j++] = m_heap.RemoveMin();
nodes[j++] = m_heap.RemoveMin();
*/
l=m_heap.RemoveMin();
/*
r=m_heap.RemoveMin();*/
root = JoinTree(l,root);
//m_heap.Insert(*root);
}
}
TreeNode *HuffmanTree::JoinTree(TreeNode* node1, TreeNode* node2)
{
TreeNode *r = new TreeNode;
r->left = node1;
r->right = node2;
r->data = node1->data + node2->data;
//strcpy(r->code,"");
return r;
}
void HuffmanTree::Encode(TreeNode *t)
{
if(t == NULL)
return;
if(t->left != NULL)
{
strcpy(t->left->code, t->code);
strcat(t->left->code, "0");
Encode(t->left);
}
if(t->right != NULL)
{
strcpy(t->right->code, t->code);
strcat(t->right->code, "1");
Encode(t->right);
}
if(NULL == t->right && NULL == t->left) //是数据节点
cout<<"value: "<<t->data<<'\t'<<"code: "<<t->code<<endl;
}
void HuffmanTree::HuffmanEncode()
{
Encode(root);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -