- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈夫曼算法建立最优二叉树
———————————————————————————————— 作者:
———————————————————————————————— 日期:
#include stdlib.h
#include stdio.h
#include time.h
#include string
#define MAX_NUMBER_OF_TREE_NODES 20
树的结点的类型定义
typedef struct
{
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;
子函数的声明部分
void InitTreeNode(HTNode);
void CinWeightForTreeNode(HTNode);
void GiveOrderForTreeNode(HTNode);
void CopyTreeNodeOrTree(HTNode,HTNode);
int main()
{
定义将要用于构造哈弗曼树的结点
HTNode TreeNodes[MAX_NUMBER_OF_TREE_NODES+1];
调用函数初始化数组结点
InitTreeNode(TreeNodes);
由用户输入各个结点的权值
CinWeightForTreeNode(TreeNodes);
对数组中的结点进行排序
GiveOrderForTreeNode(TreeNodes);
return true ;
}
初始化结点值,使全部为 NULL void InitTreeNode(HTNode *treenodes)
{
int i=1
// 数组的首结点用来存数一些信息, 如weight 域用来存储节点
的多少
突然想到了一个好处就是: 等会我们几点不断减少的过程中可以用首结点的
//weight 来指示剩余结点的数目,做访问数组元素的界限
treenodes[0].weight=MAX_NUMBER_OF_TREE_NODES;
treenodes[0].lchild=NULL;
treenodes[0].parent=NULL;
treenodes[0].rchild=NULL;
for (;i=MAX_NUMBER_OF_TREE_NODES;i++)
{
treenodes[i].weight=0;
treenodes[i].lchild=0;
treenodes[i].rchild=0;
treenodes[i].parent=0;
}
}
void CinWeightForTreeNode(HTNode *treenodes)
{
int i=1;
cout 请输入每个结点的权值: endl; for (;i=MAX_NUMBER_TREE_NODES;i++)
{
cout 第 i 个结点的权值是: endl;
cintreenodes[i].weight;
}
}
void GiveOrderForTreeNode(HTNode *treenodes)
{
HTNode TemporarySave;
//CopyTreeNodeOrTree(treenodes[1],TemporarySave);
int i=2;
int count=1;
int j=treenodes[0].weight;
for (;i=j;i++)
{
if (treenodes[count].weighttreenodes[i].weight)
count=i;
}
CopyTreeNodeOrTree(treenodes[count],TemporarySave);
for (;ij;i++)
{
CopyTreeNodeOrTree(treenodes[i],treenodes[i+1])
}
CopyTreeNodeOrTree(treenodes[weight],TemporarySave);
treenodes[0].weight--;
}
void CopyTreeNodeOrTree(HTNode Node1,HTNode Node2)
{
功能描述:用 Node1的值去修改 Node2的值
Node2.lchild = Node1.lchild;
Node2.parent = Node1.parent;
Node2.parent = Node1.rchild;
Node2.weight = Node1.weight;
检测左右孩子是否为空,如果不为空,则进行再次深度复制
采用递归调用执行
if (Node1.lchild)
CopyTreeNode(Node1.lchild,Node2.lchild);
if (Nod
您可能关注的文档
- 北师大版小学数学二年级上册期末复习计划.docx
- 北师大版小学数学五年级上册图形中的规律练习题.docx
- 北师大版小学数学五年级上册期末试卷(答案).docx
- 北师大版小学数学五年级上册谁先走反思.docx
- 北师大版小学数学五年级下册分数除法(二).docx
- 北师大版小学数学五年级下册有趣的测量.docx
- 北师大版小学数学六年级下册《绘制校园平面图》导学案设计.docx
- 北师大版小学数学六年级下学期《数的运算(三)估算》复习教案.docx
- 北师大版小学数学四年级上册期中复习知识.docx
- 北师大版小学数学四年级下册《小数点搬家(一)》教案设计.docx
- Unit7Happy Birthday!单元语法精炼与写作专练(含答案)人教版(2024)英语七年级上册.docx
- 福建省泉州第一中学2025-2026学年九年级上学期第一次月考语文试题.docx
- 第8课《〈世说新语〉二则》同步练习(含答案) 2025-2026学年统编版语文七年级上册.docx
- 高速事故应急练习题库及答案.docx
- 牛津译林版九年级上册Unit 1 Know yourself知识过关第1讲--词汇(含答案).docx
- 牛津译林版九年级上册Unit 1 Know yourself知识过关第2讲--短语句型(含答案).docx
- 教版(2024)七年级下册Unit1单词巩固(一) 七上第一部分单词复习课件.pptx
- 人教版(2024)七年级下册Unit1单词巩固(二) 七上第二部分单词复习课件.pptx
- 译林版(2024)八年级上册Unit 1 Friendship周末练习作业(含答案).docx
- 化工防腐安全练习题库及答案.docx
最近下载
- 投标服务承诺书(20篇).docx VIP
- 七年级英语第一次月考卷(考试版A4)【测试范围:沪教版五四学制2024 Starter~Unit 1】(上海专用).docx VIP
- 李白按年龄顺序写的诗.docx VIP
- 2025年四川省高考化学试卷真题(含答案解析).docx
- 高频精选:京东快递员ai面试题及答案.doc VIP
- 高频精选:京东快递员ai面试题及答案大全.doc VIP
- 吉林省中药软片炮制规范.pptx VIP
- 名著阅读《湘行散记》七年级语文上册部编版(共9页).docx VIP
- 《白洋淀纪事》阅读测试题含答案(推荐).docx VIP
- 必考名著《白洋淀纪事》导读+知识点汇总.pdf VIP
文档评论(0)