【简洁明了】哈夫曼编码详解

思路
首先结果数组的结构是,数组内每一元素都有 bit域和start域,bit域存放哈夫曼编码,start表示该编码所在数组bit中的起始位置。

void 哈夫曼编码(生成好的哈夫曼二叉树,我们想要的结果——哈夫曼编码数组){
	对于每一个节点进行:
	① cd.start=n-1;  //cd是字符编码元素的缓冲变量 就是用它暂存结果值
	②从该叶节点向上直到根节点
	④在哈夫曼数组里把cd.bit的信息存好
	⑤相对于的哈夫曼编码数组[i].start = cd.start;

}

这里有一个地方其实一开始我没想明白,就是 start的存在意义,对于一个符号所对应的哈夫曼编码元素的对象,它的bit域应该只有它自己的编码啊,何必弄个start来记录起始位置呢。
后来我明白了,因为哈夫曼编码是从叶子节点到最上面的根节点。所以bit数组要足够长,可以放得下最远的那个字符所对应的哈夫曼编码。然后哈夫曼编码是从下到上进行的,编码值也是从后往前存的。所以在二叉树层数特别多的情况,对于那些没那么远的结点就很有 记录开始位置的坐标的必要了。

//先留坑,以后放上java代码

你可能感兴趣的:(【简洁明了】哈夫曼编码详解)