一,哈夫曼树;
哈夫曼(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; //有效结点个数