给定n个权值作为n个叶子节点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的节点离根较近。
要了解哈夫曼树,首先需要了解几个名词概念:
1.节点路径长度:从树中一个节点到另一个节点之间的分支构成两个节点之间的路径,路径上的分支数目称作路径长度。
2.树的路径长度:从树根到每一个节点的路径长度之和。
3.节点的带权路径长度:从该节点到树根之间的路径长度与节点上权的乘积。
4.树的带权路径长度:树中所有叶子节点的带权路径长度之和。
5.哈夫曼树(最优二叉树):带权路径长度(WPL)最小的二叉树。
具体构造哈夫曼树的思路如下:
1.根据给定的n个权值{w1,w2,w3......wn}构成n棵二叉树的集合F = {T1,T2,T3...Tn},其中每棵二叉树Ti中只有一个带权为Wi的根节点,其左右子树均为空。
2.在F中选取两棵根节点的权值最小的树作为左右子树构造一棵新的二叉树,新的二叉树的根节点的权值为其左右子树上根节点的权值之和。
3.在F集合中删除这两棵树,同时将2中新生成的二叉树加入到集合F中。
4.重复步骤2和步骤3,直到F集合中只含有一棵树为止,这棵树为哈夫曼树。