云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 哈工大数据结构大作业 - 哈夫曼树生成、编码、遍历

哈工大数据结构大作业 - 哈夫曼树生成、编码、遍历

  • 62 次阅读
  • 3 次下载
  • 2025/5/26 9:35:59

一、 问题描述

1. 用户输入字母及其对应的权值,生成哈夫曼树;

2. 通过最优编码的算法实现,生成字母对应的最优0、1编码; 3. 先序、中序、后序遍历哈夫曼树,并打印其权值。

二、 方法思路

1.哈夫曼树算法的实现 §存储结构定义

#define n 100 /* 叶子树*/

#define m 2*(n) –1 /* 结点总数*/ typedef struct { /* 结点型*/ double weight ; /* 权值*/ int lchild ; /* 左孩子链*/ int rchild ; /* 右孩子链*/ int parent; /* 双亲链*/ 优点? }HTNODE ;

typedef HTNODE HuffmanT[ m ] ; /* huffman树的静态三叉链表表示*/

算法要点

1)初始化:将T[0],…T[m-1]共2n-1个结点的三个链域均置空( -1 ),权值为0;

2)输入权值:读入n 个叶子的权值存于T的前n 个单元 T[0],…T[n], 它们是n 个独立的根结点上的权值; 3)合并:对森林中的二元树进行n-1次合并,所产生的新结点

依次存放在T[i](n<=i<=m-1)。每次合并分两步:

-可编辑修改-

(1) 在当前森林中的二元树T [0],…T[i-1]所有结点中选取权值

最小和次最小的两个根结点T[p1]和T[p2]作为合并对象,这

里0<= p1,p2<= i –1;

(2) 将根为T[p1]和T[p2]的两株二元树作为左、右子树合并为一

株新二元树,新二元树的根结点为T[i]。即

T[p1].parent =T[p2].parent = i ,T[i].lchild= p1, T[i].rchild=p2, T[p2].weight。

2.用huffman算法求字符集最优编码的算法:

1) 使字符集中的每个字符对应一株只有叶结点的二叉树,

叶的权值为对应字符的使用频率;

2) 利用huffman算法来构造一株huffman树; 3) 对huffman树上的每个结点,左支附以0,右支附以

1(或者相反),则从根到叶的路上的0、1序列就是相应字符的编码 Huffman编码实现: 存储结构

typedef struct{ char ch; //存储字符

char bits[n+1]; //字符编码位串 }CodeNode;

typedef CodeNode HuffmanCode[n]; HuffmanCode H; 3.二叉树遍历的递归定义

T[i].weight

=T[p1].weight

+

-可编辑修改-

先根顺序遍历二叉树: 若二叉树非空则: {

访问根结点; 先根顺序遍历左子树; 先根顺序遍历右子树; }

中根顺序遍历二叉树: 若二叉树非空则:

{

中根顺序遍历左子树; 访问根结点;

中根顺序遍历右子树; } 后根顺序遍历二叉树: 若二叉树非空则: { 后根顺序遍历左子树; 后根顺序遍历右子树; 访问根结点; } ;

三、主要数据结构及源程序代码及其注释 1.扩充二叉树:内结点、外结点 (增长树)

-可编辑修改-

2.哈夫曼树

3. Huffman编码实现

源程序代码及注释

#include \#include #include #include #define n 10

-可编辑修改-

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

。 一、 问题描述 1. 用户输入字母及其对应的权值,生成哈夫曼树; 2. 通过最优编码的算法实现,生成字母对应的最优0、1编码; 3. 先序、中序、后序遍历哈夫曼树,并打印其权值。 二、 方法思路 1.哈夫曼树算法的实现 §存储结构定义 #define n 100 /* 叶子树*/ #define m 2*(n) –1 /* 结点总数*/ typedef struct { /* 结点型*/ double weight ; /* 权值*/ int lchild ; /* 左孩子链*/ int rchild ; /* 右孩子链*/ int parent; /* 双亲链*/ 优点? }HTNODE ; typedef HTNODE HuffmanT[ m

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com