2007-04-09
最小堆应用---用最小堆实现huffman树
最小堆应用---用最小堆实现huffman树,huffman是形成huffman编码的基础.
#include"MinHeap.h"
template<class T> class HuffmanTree;
template<class T>
class TreeNode{
friend class HuffmanTree<T>;
private:
T data;
TreeNode<T> *left,*right;
public:
TreeNode(T value){
data = value;
left = right = NULL;
}
TreeNode(){
left = right = NULL;
}
bool operator > (const TreeNode &node){
return data > node.data;
}
bool operator < (const TreeNode &node){
return data < node.data;
}
bool operator == (const TreeNode &node){
return data == node.data;
}
bool operator >= (const TreeNode &node){
return data >= node.data;
}
};
template <class T>
class HuffmanTree{
public:
HuffmanTree();
HuffmanTree(T value[],int n);
protected:
TreeNode<T> *JoinTree(TreeNode<T> &node1,TreeNode<T> &node2);
TreeNode<T> *root;
};
template<class T>
HuffmanTree<T>::HuffmanTree():root(NULL){
}
template<class T>
HuffmanTree<T>::HuffmanTree(T value[],int n):root(NULL){
TreeNode<T> *nodes = new TreeNode<T>[n];
TreeNode<T> leftNode,rightNode;
int i = 0;
for(i = 0; i < n; i++){
nodes[i] = TreeNode<T>(value[i]);
}
MinHeap< TreeNode<T> > *m_heap = new MinHeap< TreeNode<T> >(nodes,n);
for(i = 0; i < n-1; i++){
m_heap->RemoveMin(leftNode);
m_heap->RemoveMin(rightNode);
root = JoinTree(leftNode,rightNode);
m_heap->Insert(*root);
}
}
template<class T>
TreeNode<T> *HuffmanTree<T>::JoinTree(TreeNode<T> &node1,TreeNode<T> &node2){
TreeNode<T> *r = new TreeNode<T>;
r->left = &node1;
r->right = &node2;
r->data = node1.data + node2.data;
return r;
}
- 23:27
- 浏览 (569)
- 评论 (0)
- 分类: Data Structure
- 相关推荐
发表评论
- 浏览: 80995 次
- 性别:

- 来自: 长春

- 详细资料
搜索本博客
我的相册
cooliris
共 9 张
共 9 张
最近加入圈子
链接
最新评论
-
使用Struts2+Spring+Hiber ...
谢谢你的代码 我是一个初学者 ,没有什么资格说什么. 感谢.
-- by huobao89 -
学SSH2时写的入门例子
塔破铁鞋无觅处 谢谢了!
-- by songzhiyou -
Berkely DB Java Edition ...
bu cuo
-- by zhaoshuli99 -
搜索引擎Nutch源代码研究 ...
万分感谢你,太有用了!!
-- by laomosan -
使用Struts2+Spring+Hiber ...
源码有些问题, 麻烦给songDaoImpl 到源码贴出来好吗。
-- by cloud21






评论排行榜