利用3,6,8,12,5,7这六个值作为叶子结点的权,由该权值集合构造的哈夫曼树中带权路径长度之和为多少,该树的深度为多少。
基础知识
哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。
带权路径长度:从根结点到该结点之前的路径长度与该节点上权的乘积成为该结点的带权路径长度。
树的带权路径长度:树中所有子叶结点的带权路径长度之和。
算法步骤:
第一步:先结点权值进行排序3,5,6,7,8,12。
第二步:选择两个权值最小的结点,分别作为左、右子树构造一个二叉树。根结点权值为左、右子树权值的和。
第三步:将得到的新的结点,代替这两个权值最小的结点。
(8),6,7,8,12。
第四部:重复(2)和(3),直到F只含一棵树为止。这棵树就是带权路径最小的树,就是哈夫曼树。
第二步
第三部
(8),(13),8,12
第二步
第三步
(16),(13),12
第二步
第三步
(16),(25)
第二步
该树的带权路径长度为(原公式):
①WPL=(3+5+6+7)*3+(8+12)*2=103
还有另外一种算法:(所有两个数相加的和的总和)
②WPL=8+13+16+25+41=103
算法原理
①原计算公式是树中所有子叶结点带权路径长度之和。
(带权路径长度:从根结点到该结点之间的路径长度与该结点的权值的乘积。)
②另一种算法是反过来理解的,从该叶子结点到根结点之间的路径长度与该结点的权值计算的结果。
算法原理②大白话解释:以3和5的叶子结点开始为例。
当3和5叶子结点往上走一个路径长度需要花费8的权值;该8成为新的子叶结点与另一个子叶结点8在同一层,这两个子叶结点再往上走一个路径长度需要花费16的权值。
同理所有圆圈里面的值,就是所有子叶结点到根结点所需要花费的权值。所以所有两个数相加的和的总和就是该树的带权路径长度