c语言哈夫曼树构造代码

c语言哈夫曼树构造代码

博主就很掘的一个人,最近学哈夫曼树,想着用指针去实现,觉得用指针实现,内存消耗会更少,写到后面发现越来与麻烦,且内存开销并没有减少,于是还是使用结构体数组中规中矩的去实现哈夫曼树,博主不爱看别人的代码,知道原理便直接上手实现,所以,我的代码往往更加简单,因为,自己写,越简单越好,谁愿意写复杂的代码呢,学习哈夫曼树得小伙伴可以学习学习下面的代码。

#include
#include

typedef struct Tree {
	int data = -1;
	int parent = -1;
	int  lchild = -1;
	int rchild = -1;

}Tree;

void InitHuffmanTree(Tree HT[],int a[],int n) {
	int i;
	for (i = 0; i < n; i++) {
		HT[i].data= a[i];
	//	HT[i].rchild = NULL;
		//HT[i].lchild = NULL;
	}

}

void HuffmanTree_print(Tree HT[], int  n ) {

	int i;
	for (i = 0; i < n; i++) {
		printf("%d ", HT[i].data);
	//	printf("%d ", HT[i].parent);
	}
}
void select(Tree HT[],int n) {
	int min1, min2, min1_index, min2_index;
	int ju1=0 ,ju2=0;
	for (int i = 0; i < n; i++) {
		if (HT[i].parent == -1 && ju1==0) {
			min1 = HT[i].data;
			min1_index = i;
			ju1 = 1;

		}
		if (HT[i].parent == -1 && ju1 != 0&& min1> HT[i].data) {
			min1 = HT[i].data;
			min1_index = i;
		}
	}
	HT[min1_index].parent = n;
	for (int i = 0; i < n; i++) {
		if (HT[i].parent == -1 && ju2 == 0) {
			min2 = HT[i].data;
			min2_index = i;
			ju2 = 1;

		}
		if (HT[i].parent == -1 && ju2 != 0 && min2 > HT[i].data) {
			min2 = HT[i].data;
			min2_index = i;
			

		}
	}
	HT[min2_index].parent = n;
	HT[n].data = HT[min2_index].data + HT[min1_index].data;

	HT[n].lchild = min1_index;
	HT[n].rchild = min2_index;
	
	//printf("%d", HT[n].data);

}

void CreateHuffmanTree(Tree HT[], int n) {
	int min1, min2, min1_index, min2_index;
	int i;
	for (i = n; i < 2 * n - 1; i++) {
		select(HT, i);
		HuffmanTree_print(HT, i);
		printf("\n");
	}
	
}
void HuffmanTree_erfodic(Tree HT[], int top) {
	
	printf("%d ", HT[top].data);
	if (HT[top].lchild != -1) {
		HuffmanTree_erfodic(HT,HT[top].lchild);
	}
	if (HT[top].rchild != -1) {
		HuffmanTree_erfodic(HT,HT[top].rchild);
	}

}

int main() {
	Tree* T=NULL;
	int i;
	int a[] = { 4,6,7,2,5,8,6,9 };
	
	Tree HT[16];
	//sort_data(a, 8);
	InitHuffmanTree(HT, a, 8);
	CreateHuffmanTree(HT, 8);
	//HuffmanTree_print(HT, 8);
	
	//data_print(a, 8);//输出数组元素
	//createTree(T);
	HuffmanTree_erfodic(HT,14);
	printf("\n%d ", T);//输出树的根节点地址
	return 0;

}

你可能感兴趣的:(c++与c语言,c语言,数据结构)