哈夫曼树——数组实现

news/2024/7/5 2:11:04

 构造n个给定值节点构成的森林;

选择权值最小的两个构成叶子节点,根节点权值为两叶子节点之和,

删除原有的两棵树,将这棵树加入森林中;

重复这两部直到只有一棵树为止,此树就是哈夫曼树;

#pragma once
#include<iostream>
namespace stlname 
{
	using std::cin;
	typedef struct
		{
		int weight;//权重
		int parent, lch, rch;	//父节点,孩子节点下标
		}HTNode,*HuffmanTree;
	void Seclect(HuffmanTree HT,int i ,int* s1,int* s2);
	
	void CreateHuffmanTree(HuffmanTree HT, int n)//初始化
		{
		if (n <= 1)return;
		int m = 2 * n - 1;
		HT = new HTNode[m+1]();//2n个节点;

			for (int i = 1; i < m + 1; i++)
			{
				HT[i].lch = HT[i].rch = HT[i].parent = 0;//初始化

			}
			for (int i = 1; i <= n; i++)std::cin >> HT[i].weight;

			int* s1, * s2 = NULL;
			for (int i = n + 1; i < m; i++)
				{
				Seclect(HT, i - 1, s1, s2);

				HT[*s1].parent = i; HT[*s2].parent = i;
				HT[i].lch = *s1; HT[i].rch = *s2;
				HT[i].weight = HT[*s1].weight + HT[*s2].weight;

				}

		}

	
		
			
}

 

 哈夫曼编码算法实现:

void CreateHuffmanCode(HuffmanTree HT, HuffmanCode  HC, int n)
	{
		HC = new char* [n + 1];
		char* cd = new char[n];
		cd[n - 1] = '\0';
		
		for (int i = 1; i < n; i++)
		{
			int start = n - 1; int c = i;
			int f = HT[i].parent;
			while (start != 0) {
				start--;
				if (HT[f].lch == c) { cd[start] == '0'; }
				else cd[start] = '1';
				c = f;
				f = HT[f].parent;
						
			}

			strcpy(HC[i],&cd[start]);
		}
		delete cd; cd = NULL;

	}
	


http://lihuaxi.xjx100.cn/news/1269627.html

相关文章

微服务项目Linux环境搭建

linux环境搭建 阿里云镜像地址&#xff1a;http://mirrors.aliyun.com 下载linux镜像文件地址&#xff1a; http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.7810f5adugpU3h 选择CentOS-7-x86_64-Everything-2009.iso&#xff0c;点击下载。…

ROS:计算图

目录 一、ROS计算图简介二、节点&#xff08;Node&#xff09;三、节点管理器&#xff08;Master&#xff09;四、消息&#xff08;Message&#xff09;五、话题&#xff08;Topic&#xff09;六、服务&#xff08;Service&#xff09;七、动作&#xff08;Action&#xff09;八…

到底还有谁学不会 MySQL 中的视图?

文章目录 MySQL中的视图视图的概念视图的用法简化查询操作提高查询效率保护数据的安全性 视图的代码示例总结 MySQL中的视图 在MySQL中&#xff0c;视图是一种虚拟表&#xff0c;它是由一个或多个基本表的行或列组成的。视图并不实际存储数据&#xff0c;而是根据定义的查询语…

Word技巧之【文档自动保存】

打工人的噩梦—电脑突然坏掉&#xff0c;文档还没保存&#xff01;你是否遇到这种情况&#xff1f; 如果Word文档设置了自动保存&#xff0c;就不用太过担心了&#xff0c;只需要几个简单的操作就能设置好。还不知道的小伙伴&#xff0c;跟着小编一起看看吧。 设置Word文档自动…

Vb+sql医院门诊管理系统(系统+论文+开题报告+任务书+文献综述+参考文献)

信息时代已经来临&#xff0c;计算机应用于医院的日常管理&#xff0c;为医院的现代化带来了从未有过的动力和机遇&#xff0c;为医疗卫生领域的发展提供了无限的潜力。采用计算机管理信息系统已成为医院管理科学化和现代化的标志&#xff0c;给医院带来了明显的经济效益和社会…

丰田汽车投资人要求董事长下台

&#x1f699; 丰田电动车推广不力&#xff0c;股东要求董事长下台 Toyota faced down two proxy votes at its annual general meeting. In an unusual challenge to the management of a Japanese company, activist investors in America and Europe recommended voting aga…

在 Python 中打印度数符号

本篇文章将介绍如何用 Python 编写度数符号。 度数符号 度数符号是表示特定区域温度的符号。 例如&#xff0c;假设卡纳塔克邦的气温为 34 摄氏度&#xff1b; 它表明&#xff0c;在印度卡纳塔克邦&#xff0c;温度为 34 度。 度数也与华氏度和摄氏度一起使用。 使用 chr 函数…

【Linux】常用指令(二)

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 man指令 echo指令 补充: echo和cat的区别&#xff1f; CP指令 mv命令 ctrlc 指令 which指令 学习中遇到得问题: 1.如何看待指令&#xff1f; 2.在执行指令之前&#xf…