哈夫曼树及哈夫曼编码
相关概念:
结点的带权路径长度: 该结点的路径长度 × 该结点的权值
最优二叉树(哈夫曼树):给定n个权值并作为n个叶结点按一定规则构造的一棵二叉树,使其带权路径长度达到最小值,则这棵二叉树被称为最优二叉树。
前缀编码:在所有字符的编码中,任何一个字符都不是另一个字符的前缀。
构造哈夫曼树和哈夫曼编码:
HuffmanTree :
package BiTree;
/**
* @description 哈夫曼树结点结构
*
* @date 2015年12月30日
*/
class HuffmanNode {
private int weight; // 结点权值
private int flag; // 结点是否加入哈夫曼树标志
private HuffmanNode parent, lchild, rchild; // 父结点,左右孩子结点
public HuffmanNode(){
this(0);
}
// 构造一个具有权值的结点
public HuffmanNode(int weight){
this.weight = weight;
flag = 0;
parent = lchild = rchild = null;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public<