赫夫曼树及编码问题(Huffman)
一、题目描述
将数组转化为赫夫曼树。
二、解题思路
赫夫曼树本质上是二叉树,赫夫曼树的每一个结点结构如下图:
构建Huffman数组并初始化
寻找最小值和次小值,并构建关系
构建关系
三、注意事项
1)为什么只循环array.length - 1次,因为只有n-1个非叶子结点 。
2)构建关系时,子结点是最小值和次小值,父节点是array.length + j。
3)打印赫夫曼树一般只打印顶层结点,即最后加和的那个值,如需打印整个赫夫曼树,需要按照二叉树的打印方式(队列)。
四、代码实现
见我的github:Huffman