构建哈夫曼树

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

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

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

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

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


首先定义节点类
定义的数据域为一个Data类 用来存储字符和字符的频率
以下为Node类和Data类
[img]http://dl2.iteye.com/upload/attachment/0109/1964/60153c4f-02ab-31d6-886c-459db9c9c549.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0109/1966/0afbd1e0-80dd-3566-b572-a4c848824056.png[/img]
接下来定义HFMtree类
实现步骤:
1.统计每一个字符出现的次数(频率)
2.将数据封装到节点中,再将节点存入到链表(数组队列)中
3.对链表中的数据根据次数进行排序
4.移除最小两个次数的节点对象,创建一个双亲节点,再将双亲节点添加到链表中
5.重复3,4;直到链表中只有一个节点的时候,那么该节点为哈夫曼二叉树的根节点。

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

[img]http://dl2.iteye.com/upload/attachment/0109/1968/08a0b581-c6f9-3e4f-ac6d-e12c8fde019b.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0109/1970/3dc57f0f-da91-3640-8a7e-6870c4a64280.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0109/1972/ad07f2f9-d5e1-308c-b20e-bee1a9be8887.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0109/1974/6be306da-7001-3ef1-98a0-32c7b55f8dbc.png[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值