问题: 给定N个带权值的叶子节点,如何构造出一个带权路径最小的二叉树?
答:哈夫曼树(Huffman Tree)
在数据结构理论中,哈夫曼树又称为最优树,相关的知识点还有哈弗曼编码等。在正式介绍哈夫曼树之前,需要知道下面的知识点:
(1)节点路径
按照规定,将树中一个节点到另一个节点所经历的分支,称为节点路径,比如上图中节点A到节点E的路径为ABE。
(2)路径长度
根据上述“节点路径”的定义,将路径上的分支总数称为路径长度,比如上图中节点A到节点E的路径长度为2。
(3)节点的带权路径长度
根据上述“节点路径”和“路径长度”的定义,将从根节点到某节点的路径长度和节点权值的乘积,称为节点的带权路径长度。比如上图中节点A到节点D的路径长度为2,权值为8,则带权路径长度为2x8=16。
(4)树的带权路径长度
根据上述“节点的带权路径长度”的定义,将树中所有叶子节点的带权路径长度,称为树的带权路径长度。比如上图中,三个叶子节点C、D、E,对应的路径长度分别为1、2、2,对应的权值分别为4、8、3,则树的带权路径长度为:
将上述概念形式化,可以使用下面的公式进行计算:
其中了表示路径长度,w表示权值,n表示叶子节点个数。
总结:
上文梳理了理解哈夫曼树所必须的基本概念,包含节点路径和路径长度等,下文将会讲解如何构造哈夫曼树。