赫夫曼树及编码问题(Huffman)

一、题目描述

       将数组转化为赫夫曼树。

二、解题思路

       赫夫曼树本质上是二叉树,赫夫曼树的每一个结点结构如下图:

       赫夫曼树及编码问题(Huffman)

       构建Huffman数组并初始化

       赫夫曼树及编码问题(Huffman)

       寻找最小值和次小值,并构建关系

赫夫曼树及编码问题(Huffman)

       构建关系

       赫夫曼树及编码问题(Huffman)

三、注意事项

       1)为什么只循环array.length - 1次,因为只有n-1个非叶子结点 。

       赫夫曼树及编码问题(Huffman)

       2)构建关系时,子结点是最小值和次小值,父节点是array.length + j。

      3)打印赫夫曼树一般只打印顶层结点,即最后加和的那个值,如需打印整个赫夫曼树,需要按照二叉树的打印方式(队列)。

四、代码实现

       见我的github:Huffman