level 12
      
	  jin123456bat
	  
	  楼主
	  
	
	#ifndef HuffmanTemplate
#define HuffmanTemplate template<class TYPE>
class huffman
{
template<class TYPE>
class Node
{
public:
TYPE data; //数据
int rate; //权
Node<TYPE> * left;
Node<TYPE> * right; Node(TYPE DATA = 0,int RATE = 0)
{
data = DATA;
rate = RATE;
left = NULL;
right = NULL;
}
};
Node<TYPE> * root;
public:
//template <class TYPE>
huffman(TYPE A = 0,int RATE = 0); //构造函数
Node<TYPE> * Search(Node<TYPE> * Current,TYPE A); //搜索内容为A的节点 返回节点指针 前序遍历
void Merge(huffman<TYPE> * A); //两个树进行合并
void Clear(); //清空树
bool IsEmpty(); //判断树是否为空
void Print(huffman<TYPE> const * Current = root,int print = 1); //输出 print=1输出data print=0输出rate
}; template<class TYPE>
huffman<TYPE>::huffman(TYPE A = 0,int RATE = 0)
{
root = new Node<TYPE>(A,RATE);
} template<class TYPE>
Node<TYPE> *huffman<TYPE>::Search(Node<TYPE> const * Current,TYPE A)
{
if(Current)
{
if(A == Current->data)
return Current;
if(Current->left)
{
return Search(Current->left,A);
}
if(Current->right)
{
return Search(Current->right,A);
}
}
return NULL;
} template<class TYPE>
void huffman<TYPE>::Merge(huffman<TYPE> * A)
{
Node<TYPE> *iterator;
iterator = new Node<TYPE>();
if(A->data>data)
{
iterator->left = A;
iterator->right = root;
}
else
{
iterator->left = root;
iterator->right = A;
}
iterator->rate = A->rate+rate;
root = iterator;
} template<class TYPE>
void huffman<TYPE>::Print(huffman<TYPE> const * Current = root,int print = 1)
{
if(Current)
{
if(print)
cout<<(Current->data)?Current->data:""<<" ";
else
cout<<(Current->data)?Current->rate:""<<" ";
if(Current->left)
this->Print(Current->left,print);
if(Current->right)
this->Print(Current->right,print);
}
} template<class TYPE>
void huffman<TYPE>::Clear()
{
root = NULL;
} template<class TYPE>
bool huffman<TYPE>::IsEmpty()
{
return root==NULL;
}
#endif