最小堆应用---用最小堆实现huffman树
2006-05-29 23:29
387 查看
#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>
;
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;
}
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>
;
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;
}
相关文章推荐
- Huffman树实现与应用(编码解码压缩解压缩)
- 数据结构C++使用最小堆实现huffman树
- JAVA应用JNI调用OpenCV实现人脸检测
- 实验三 顺序栈的基本操作实现及其应用
- 主流移动应用开发框架(1)——实现左右滑隐藏菜单的开源框架AndroidResideMenu二次开发
- 使用JCS在Web门户应用中实现对象缓存(2)
- Android应用自动更新功能的代码实现
- C#特性的应用(简易横切关注点实现)
- 实验一:线性表的基本操作实现及其应用
- 共享内存在Java中实现和应用
- 有限状态机(Finite State Machine)在游戏中的应用和实现
- Scala中Stream的应用场景及其实现原理
- zookeeper实现分布式应用系统服务器上下线动态感知程序、监听机制与守护线程
- 实现iOS应用图标右上角数字badge number提醒
- 病历智能处理引擎的架构设计、实现和应用
- Android应用中意见反馈功能的探讨与实现
- linux shell 脚本实现tcp/upd协议通讯(重定向应用)
- 实验一 线性表的基本操作实现及其应用
- Spring AOP 实现原理与 CGLIB 应用
- mybatis应用(二)注解的实现