C++实现Huffman树

代码如下:

#include <iostream>
using namespace std;
int s1, s2;typedef struct {int weight;int parent, lch, rch;
} HTNode, *HuffmanTree;void Select(HuffmanTree &HT, int n, int &s1, int &s2) {int minv;//定义一个临时变量存储最小值for (int i = 1; i <= n; i++) { //开始找第一个最小值if (HT[i].parent == 0) {minv = i;break;}}for (int i = 1; i <= n; i++) {if (HT[i].parent == 0)if (HT[i].weight < HT[minv].weight)minv = i;}s1 = minv;//开始找第二个最小值,且与第一个不同for (int i = 1; i <= n; i++) {if (HT[i].parent == 0 && i != s1) {minv = i;break;}}for (int i = 1; i <= n; i++) {if (HT[i].parent == 0 && i != s1)if (HT[i].weight < HT[minv].weight)minv = i;}s2 = minv;
}void CreatHuffmanTree(HuffmanTree HT, int n) {if (n <= 1)return ;int m = 2 * n - 1; //数组共2n-1个元素HT = new HTNode[m + 1]; //0号单元未用,HT[m]表示根节点for (int i = 1; i <= m; i++) {HT[i].lch = 0;//初始化HT[i].rch = 0;HT[i].parent = 0;}for (int i = 1; i <= n; i++) {cin >> HT[i].weight; //输入前n个元素的weight值}//初始化结束,下面开始建立哈夫曼树for (int i = n + 1; i <= m; i++) { //合并产生n-1个结点-构造哈夫曼树Select(HT, i - 1, s1, s2); //在HT[k](1<=k<=i-1)中选择两个其双亲域为0,//且权重最小的结点,并返回它们在HT中的序号s1和s2HT[s1].parent = i;//表示从F中删除s1,s2HT[s2].parent = i;HT[i].lch = s1;//s1,s2分别作为i的左右孩子HT[i].rch = s2;HT[i].weight = HT[s1].weight + HT[s2].weight;//i的权重为左右孩子权重之和cout << HT[i].weight << " " << "(" << HT[s1].weight << "," << HT[s2].weight << ")" << endl;}
}int main() {HuffmanTree H;int n;cin >> n;CreatHuffmanTree(H, n);return 0;
}

测试结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core开发实战(第25课:路由与终结点:如何规划好你的Web API)--学习笔记(下)...

25 | 路由与终结点&#xff1a;如何规划好你的Web API自定义约束实现了路由约束接口&#xff0c;它只有一个 Match 方法&#xff0c;这个方法传入了 Http 当前的 httpContext&#xff0c;route&#xff0c;routeKey这个 routeKey 就是我们要验证的 key 值后面两个参数 RouteVal…

[蓝桥杯][基础练习VIP]Huffuman树

题目描述 Huffman树在编码中有着广泛的应用。在这里&#xff0c;我们只关心Huffman树的构造过程。 给出一列数{pi}{p0, p1, …, pn-1}&#xff0c;用这列数构造Huffman树的过程如下&#xff1a; 找到{pi}中最小的两个数&#xff0c;设为pa和pb&#xff0c;将pa和pb从{pi}中删除…

mysql数据去重_mysql 数据去重

数据库版本mysql5.5.10 操作工具navicate for mysql插入数据重复了 用mysql语句去重-- 查询数量是否大于1 大于1 表示有重复数据SELECT count(*) FROM financial_summary_detail t GROUP BY t.SUMMARY_ID,t.SOURCE,t.TEXT-- 根据查询创建临时表create table t_temp SELEC…

微软 Visual Studio 2019 16.5 发布:.NET 移动开发、生产力

微软最新发布了 Visual Studio 2019 16.5 版本&#xff0c;下面来看看主要更新内容&#xff1a;.NET 移动开发首先要讨论的特性是 XAML Hot Reload for Xamarin.Forms。此功能可加快开发速度&#xff0c;并使开发者可以更轻松地在移动应用的用户界面上进行构建、实验和迭代。且…

[蓝桥杯][基础练习VIP]报时助手

题目描述 给定当前的时间&#xff0c;请用英文的读法将它读出来。 时间用时h和分m表示&#xff0c;在英文的读法中&#xff0c;读一个时间的方法是&#xff1a; 如果m为0&#xff0c;则将时读出来&#xff0c;然后加上“o’clock”&#xff0c;如3:00读作“three o’clock”。…

chrome主题_谷歌Chrome将很快允许用户创建自定义主题

站长之家(ChinaZ.com) 7月31日 消息:据9to5google报道&#xff0c;虽然用户可以通过Chrome Web Store定制主题&#xff0c;但用户要根据自己的独特喜好定制主题却不是一个简单的事。谷歌正寻求通过在Chrome内置一个自定义主题生成器来解决这个问题。Chrome Web Store中有许多传…

[蓝桥杯][算法提高VIP]数组替换-模拟

题目描述 编写并测试如下函数&#xff1a; void Add (int a[], int m, int b[], int n); 该函数将数组b的前n个元素追加到数组a的前m个元素后&#xff0c;假定数组a具有至少存放mn个元素的空间。例如&#xff0c;如果数组a为 {22,33,44,55,66,77,88,99}&#xff0c;数组b为{20,…

使用Magicodes.IE.Excel完成Excel图片的导入和导出

说明本章教程主要说明如何使用Magicodes.IE.Excel进行图片的导入导出。要点配置DTO进行Excel图片导出配置DTO进行Excel图片导入图片导入导出特性说明ExportImageFieldAttributeHeight&#xff1a;高度(默认15)Width&#xff1a;宽度(默认50)Alt&#xff1a;图片不存在时替换文本…

C++未定义行为-数组越界

我们先来看看下面的代码&#xff1a; #include <iostream> using namespace std; const int N 100010; int a[N]; int main() {for (int i 1;i<N;i) a[i] 2;return 0; }当我们写这段代码的时候&#xff0c;编译器就会发生这样的问题。 这是为什么呢&#xff1f;&a…

SuperBenchmarker一个用.NET编写的压测工具

0x01 前言在这之前想必大家对ab(http)与abs(https)也有一些了解,我们今天不去看ab和abs,SuperBenchmarker(sb.exe)是一个压测工具,他是一个受Apache Benchmark的启发,他会在终端窗口为我们显示最终的结果,同时也会在web界面生成一个动态结果。SuperBenchmarker(sb.exe)可以在Wi…

mysql文献综述_文献综述随笔(二十)

一、基本信息标题&#xff1a;中小型酒店管理系统的设计与实现时间&#xff1a;2013来源&#xff1a;厦门大学关键词&#xff1a;MVC;B/S;JAVA EE;JSP;MySQL;瀑布开发模型二、研究内容1.主要内容&#xff1a;系统业务需求、功能需求、系统架构设计、数据库设计1.1功能模块设计&…

[蓝桥杯][算法提高VIP]分分钟的碎碎念-dfs

题目描述 以前有个孩子&#xff0c;他分分钟都在碎碎念。不过&#xff0c;他的念头之间是有因果关系的。他会在本子里记录每一个念头&#xff0c;并用箭头画出这个念头的来源于之前的哪一个念头。翻开这个本子&#xff0c;你一定会被互相穿梭的箭头给搅晕&#xff0c;现在他希望…

五分钟完成 ABP vNext 通讯录 App 开发

ABP vNext&#xff08;后文简称Abp&#xff09;是 Volo 公司堪称艺术品级的应用开发框架&#xff0c;它基于领域驱动设计&#xff08;DDD&#xff09;的思维&#xff0c;创新地采用了模块化的设计。Abp 目前无疑是 ASP.NET Core 开发框架中最先进和最优雅的存在。笔者认为&…

mysql 5.74安装教程_MySQL安装、基本账户安全(5.0以后版本)

-----------MySQL 5.0以后版本的安装-----------MySQL安装安装包学习的必杀绝技——就是阅读包的安装说明(readme & install)文档。----------# rm /etc/my.cnf (安装前执行一下)----------1.Mysql-5.0.40.tar.gz1.1.Source Installation Overview(lines 74 of …

使用GUI工具Portainer.io管控Docker容器

背景5年前容器技术扑面而来&#xff0c;如今已经成为面向云原生开发的基础架构&#xff0c;基于微服务的设计需要部署大量容器&#xff0c;同时强调了友好快速的管理容器。是时候推荐一个轮子Portainer.io&#xff1a;提供GUI界面的容器管理工具&#xff0c;给开发者的工具箱又…

[蓝桥杯][算法提高VIP]凶手-思维

题目描述 巴斯维克命案抓住了六个嫌疑犯&#xff0c;他们的口供如下&#xff1a; A&#xff1a;我不是罪犯 B&#xff1a;A、C中有一个是罪犯 C&#xff1a;A和B说了假话 D&#xff1a;C和F说了假话 E&#xff1a;其他五个人中&#xff0c;只有A和D说了真话 F&#xff1a;我是罪…

php mysql 子查询_php – MySQL查询和子查询

我有这样的查询&#xff1a;SELECT SUM(price) AS GINTO,((SELECT COUNT(price)*9.99 FROM sms_logs WHERE price 200000)(SELECT COUNT(price)*3.99 FROM sms_logs WHERE price 60000)(SELECT COUNT(price)*1.99 FROM sms_logs WHERE price 24000)(SELECT COUNT(price)*0.9…

【项目升级】集成Quartz.Net Job实现(一)

这两天的新闻也是越来越多了&#xff0c;不仅Github接手了NPM&#xff0c;还有.NET 5也要新鲜出炉了&#xff08;11月正式发布&#xff09;&#xff0c;当然还有MVP峰会也正在如火如荼的展开&#xff0c;会有哪些好的东西被碰撞出来&#xff0c;也是很期待的。这些天我也简单的…

DevC++如何安装自定义头文件并使用

首先我们打开DevC&#xff0c;然后点击新建。 新建一个控制台应用程序 取一个喜欢的文件名。 然后会出现如下界面。 点击新建单元 将头文件源码放入 找到空白位置&#xff0c;右键&#xff0c;然后点关闭并保存 保存的文件名要为头文件的名字 使用这个头文件时&#xff0c;只…

sas sql中有类似mysql的 g_SAS中的SQL

自我愚见&#xff0c;望有错指出改之。/*SQL 学习*//*数据定义语言(DDL)&#xff1a;create、drop、alter*//*数据操作语言(DML)&#xff1a;insert、update、delete*//*数据查询语言(DQL)&#xff1a;select*//*数据控制语言(DCL)&#xff1a;grant、remove、commit、rollback…