哈弗曼编码树
使用了优先队列
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* haff_man(vector<int> nums)
{
int len = nums.size();
priority_queue<TreeNode*,vector<TreeNode*>,cmp> haff;//小顶堆
//使用优先队列的方式获得每次的最小的两个数字,然后将他们相加,并且进入到
//优先队列中去这样可以进行相应的测试工作了
for (int i = 0; i < len; ++i)//建立好了小顶堆了
{
TreeNode* temp = new TreeNode(nums[i]);
haff.push(temp);
}
while (haff.size() != 1)
{
TreeNode* h_left = haff.top();
haff.pop();
TreeNode* h_right = haff.top();
haff.pop();
TreeNode* root = new TreeNode(h_left->val + h_right->val);
root->left = h_left;
root->right = h_right;
haff.push(root);
}
TreeNode* result = haff.top();
return result;
}