Huffman树的实现
来源:互联网 发布:网络推广公司哪个好 编辑:程序博客网 时间:2024/04/29 22:53
// HuffmanTree.h: interface for the HuffmanTree class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_HUFFMANTREE_H__E2FE6C12_C0A9_4483_AF1B_9623F1FD0EF8__INCLUDED_)
#define AFX_HUFFMANTREE_H__E2FE6C12_C0A9_4483_AF1B_9623F1FD0EF8__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "HuffmanTreeNode.h"
#include "MinHeap.h"
template <class T>
class HuffmanTree
{
private:
HuffmanTreeNode<T>* root; //Huffman树的树根
//把ht1和ht2为根的Huffman子树合并成一棵以parent为根的二叉树
void MergeTree(HuffmanTreeNode<T> &ht1,HuffmanTreeNode<T> &ht2, HuffmanTreeNode<T>* parent);
public:
//构造Huffman树,weight是存储权值的数组,n是数组长度
HuffmanTree(T weight[],int n);
//删除Huffman树或其子树
void DeleteTree(HuffmanTreeNode<T>* root);
virtual ~HuffmanTree(); //析构函数
};
template <class T>
void HuffmanTree<T>::MergeTree(HuffmanTreeNode<T> &ht1,HuffmanTreeNode<T> &ht2, HuffmanTreeNode<T>* parent)
{
parent->left=&ht1;
parent->right=&ht2;
parent->element=ht1.element+ht2.element;
parent->parent=NULL;
ht1.parent=ht2.parent=parent;
}
template <class T>
HuffmanTree<T>::HuffmanTree(T weight[],int n)
{
MinHeap<HuffmanTreeNode<T>> heap(n); //定义最小值堆
HuffmanTreeNode<T> *parent,&firstchild,&secondchild;
HuffmanTreeNode<T>* NodeList=new HuffmanTreeNode<T>[n];
for(int i=0;i<n;i++) //初始化
{
NodeList[i].element=weight[i];
NodeList[i].parent=NodeList[i].left=NodeList[i].right=NULL;
heap.Insert(NodeList[i]); //向堆中添加元素
}
for(i=0;i<n-1;i++)
//通过n-1次合并建立Huffman树
{
parent=new HuffmanTreeNode<T>;
firstchild=heap.RemoveMin(); //选择权值最小的结点
secondchild=heap.RemoveMin(); //选择权值次小的结点
MergeTree(firstchild,secondchild,parent); //合并权值最小的两棵树
heap.Insert(*parent); //把parent插入到堆中去
root=parent; //建立根结点
}
delete []NodeList;
}
template <class T>
void HuffmanTree<T>::DeleteTree(HuffmanTreeNode<T>* root)
{
if(root)
{
DeleteTree(root->left);
DeleteTree(root->right);
delete root;
}
}
template <class T>
virtual HuffmanTree<T>::~HuffmanTree()
{
DeleteTree(root);
}
#endif // !defined(AFX_HUFFMANTREE_H__E2FE6C12_C0A9_4483_AF1B_9623F1FD0EF8__INCLUDED_)
- Huffman树的实现
- Huffman树的实现
- Huffman树的实现
- Huffman树的简单实现
- 【C++】Huffman树的实现
- Huffman树的建立(c++实现)
- Huffman树的建立(c++实现)
- Huffman树结构的实现(上)
- Huffman树结构的实现(下)
- Huffman编码树的Java实现
- huffman树( c++) 的三种实现
- 用Huffman树实现文本的压缩
- Huffman树的定义与实现
- huffman(哈夫曼)树的实现
- Huffman编码树的C++实现
- Huffman树及编码的实现
- Huffman编码的实现
- huffman表的实现
- CSDN的BLOG竟然有BUG.......
- JSF和Spring集成
- 二叉树的结点实现
- Hibernate配置
- 男女
- Huffman树的实现
- Spring Web应用入门
- c++ Prime读书笔记3(strlen)
- 使用ajax遇到的一些小问题
- 数据结构绪论中的几道题
- 最大堆的实现
- 两条合并一条,求最简单的解法
- c++ Prime读书笔记4(using名字空间)
- 两表累加时的问题