25.5.4数据结构|哈夫曼树 学习笔记

知识点前言

一、搞清楚概念

●权:___________

●带权路径长度:__________

WPL=所有的叶子结点的权值*路径长度之和

●前缀编码:____________

二、构造哈夫曼树

n个带权值的结点,构造哈夫曼树算法:

1、转化成n棵树组成的森林F

2、构造新结点B,取森林里权值最小的两颗作为新结点的左右子树,新权值=左权值+右权值

3、删除F中被选择的两颗树,加上新生成的借点B

4、重复以上步骤,直到F中只有一颗树为止

三、哈夫曼树的性质

1每个初始节点最终都会成为叶子节点,权值越小,路径长度越大

2构造过程中新建了n-1个节点,节点总数2n-1 =n-1+n;

3哈夫曼树中不存在度为1的节点

一、构造哈夫曼树

题目:已知节点和他们出现的频率,构造哈夫曼树算法

/******已知哈夫曼树n个节点的权值表,构造哈夫曼树**********/

/*******依据哈夫曼树,产生哈夫曼编码************/

代码框架:

cs 复制代码
/********实现哈夫曼树的构造***********/
/* 思考
    1、如何存储?链式?顺序?
    2、借助一个性质:
    二叉树中叶子结点数量n,度为2的节点数量n-1,总结点数:2n-1
    3、节点结构??
*/
/*定义huffman树的节点结构,采用顺序存储,存储索引号*/
typedef struct{
    int weight;//节点的权值
    int lchild,rchild;//左右孩子的索引号
    int parent;//父节点的索引号
}HafumanNode,*HafumanTree;

/******已知n个哈夫曼树的权值表,构造哈夫曼树**********/
HafumanTree createHafumanTree(const int *w,int n);
void releaseHuffmanTree(HafumanTree tree);
typedef char *hafumancode;
/*******依据哈夫曼树,产生哈夫曼编码************/
hafumancode *createHafumancode(HafumanTree tree,int n);
void releaseHafumancode(hafumancode *codes,int n);
相关推荐
不穿格子的程序员9 小时前
从零开始写算法——链表篇4:删除链表的倒数第 N 个结点 + 两两交换链表中的节点
数据结构·算法·链表
dragoooon349 小时前
[hot100 NO.19~24]
数据结构·算法
电子硬件笔记10 小时前
Python语言编程导论第七章 数据结构
开发语言·数据结构·python
Tony_yitao10 小时前
15.华为OD机考 - 执行任务赚积分
数据结构·算法·华为od·algorithm
C雨后彩虹11 小时前
任务总执行时长
java·数据结构·算法·华为·面试
柒.梧.11 小时前
数据结构:二叉排序树构建与遍历的解析与代码实现
java·开发语言·数据结构
zhuzewennamoamtf12 小时前
Linux内核platform抽象、数据结构、内核匹配机制
linux·运维·数据结构
自然常数e14 小时前
深入理解指针(6)
c语言·数据结构·算法·visual studio
一杯美式 no sugar14 小时前
数据结构——栈
c语言·数据结构·
蒙奇D索大15 小时前
【数据结构】考研408 | 冲突解决精讲: 拉链法——链式存储的艺术与优化
数据结构·笔记·考研·改行学it