二叉树的应用:哈夫曼树+二叉排序树

一,哈夫曼树;

哈夫曼(Haffman)树,也称最优二叉树,是指对于一组带有确定权值的叶子结点,构造的具有最小带权路径长度的二叉树。
二叉树的路径长度:由根结点到所有叶子结点的路径长度之和。
二叉树的带权路径长度:从根结点到各个叶子结点的路径长度与相应结点权值的乘积之和。
在这里插入图片描述
例子:在这里插入图片描述
WPL=2×2+4×2+5×2+3×2=28;

哈夫曼树的构造
特点:权值越大的叶子结点越靠近根结点,而权值越小的叶子结点越远离根结点。
构造算法

class HuffmanNode<T>{
   
private T data;  //数据元素
public double weight;   //权重
public int parent;
public int lchild;
public int rchild;
//创建不带数据值的离散结点,即叶子结点,无孩子并标记为-1
public HuffmanNode()//构造函数
{
   
data = null;
weight = 0.0;
parent = 0;
lchild = -1;
rchild = -1;
}
//创建带数据值的离散结点,即叶子结点,无孩子标记为-1;
public HuffmanNode(T x,double w){
   
data = x;
weight = x;
parent = 0;
lchild = -1;
rchild = -1;
} 
public T getData(){
   
return data;
}
}
//定义哈夫曼树
class HuffmanTree<T>{
   
private final int maxSize = 100;
public HuffmanNode<T>[] nodes; //哈夫曼树各结点
public int length; //有效结点个数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值