C++ 哈弗曼树类 创建哈弗曼树、输出哈弗曼树、输出哈弗曼编码

#include 
#include 
int *findMin(struct TreeNode *trees,int length);
using namespace std;
struct huffmanCode{
	int *p;
	int start;
};
struct TreeNode{
	int wight;
	int parent;
	int lchild;
	int rchild;
}; 

class huffmanTree{
	public :
		struct TreeNode *array; 
		int start;
		int length;
		huffmanTree(int *array,int length);
		void print(int start);
		struct huffmanCode Code(int index); 
};

huffmanTree::huffmanTree(int *array,int length){
	//创建节点数组 初始化 
//	struct TreeNode trees[length*2-1];
	struct TreeNode *trees;
	trees=(struct TreeNode*)malloc((2*length-1)*sizeof(struct TreeNode));
	int *p;//权重最小两个节点下标 
	for(int i=0;istart=2*length-1; //数组长度 
	this->array=trees;
	this->length=length;
}
//输出哈弗曼树 树根应该是在下标为2*length-2处 
void huffmanTree::print(int start){
	cout<array[start].wight<<" ";
	if(this->array[start].lchild!=-1){
		this->print(this->array[start].lchild);
	}
	if(this->array[start].rchild!=-1){
		this->print(this->array[start].rchild);
	}
}
//输出编码  参数是下标 
struct huffmanCode huffmanTree::Code(int index){
	struct huffmanCode code;
	struct TreeNode child=this->array[index];
	int parent=child.parent;
	code.start=this->length;
	code.p=(int *)malloc(length*sizeof(int));
	while(parent!=-1){
		if(this->array[parent].lchild==index){
			code.p[code.start]=0;
		}else{
			code.p[code.start]=1;
		}
		index=parent;
		code.start--;
		parent=this->array[parent].parent;		
	}
	for(int i=code.start+1;i<=length;i++){
		cout<

 

你可能感兴趣的:(C++)