构建哈夫曼树

内容拓展:
树形结构包括:
退化树(链表)
二叉树
哈夫曼树
满二叉树
完全二叉树
平衡二叉树
表达式树
红黑树
B+
B-
AVL
...

1.二叉树的组成
根节点
子节点(左字节点,右子节点,双亲节点)
叶子节点(终端节点)

树的最大深度:有少层深度就是多少
树的最大宽度:有多少个叶子节点

2.哈夫曼二叉树的特点
最优的带权路径。
根节点到叶子节点的路径长度*权重之和
路径:从根节点到叶子节点的路径长度
路径长度就是深度-1

3.编程实现
1.输出哈弗曼树及码表
2.将哈夫曼二叉树绘制到界面上(见《绘图项目》)


首先定义节点类
定义的数据域为一个Data类 用来存储字符和字符的频率
以下为Node类和Data类
构建哈夫曼树_第1张图片
构建哈夫曼树_第2张图片
接下来定义HFMtree类
实现步骤:
1.统计每一个字符出现的次数(频率)
2.将数据封装到节点中,再将节点存入到链表(数组队列)中
3.对链表中的数据根据次数进行排序
4.移除最小两个次数的节点对象,创建一个双亲节点,再将双亲节点添加到链表中
5.重复3,4;直到链表中只有一个节点的时候,那么该节点为哈夫曼二叉树的根节点。

6.遍历哈夫曼二叉树,输出信息

构建哈夫曼树_第3张图片
构建哈夫曼树_第4张图片
构建哈夫曼树_第5张图片
构建哈夫曼树_第6张图片

你可能感兴趣的:(编程,哈弗曼树)