求哈夫曼树的带权路径长度
      哈夫曼树,即最优二叉树,是根据哈夫曼编码和贪心策略构造的一种特殊的二叉树。哈夫曼树的叶节点按照权值增大的原则进行排序,将每一层次上(叶节点外)的结点都作为父节点,由上至下构造树的过程称为哈夫曼树的构造。建立一棵哈夫曼树需要经历若干步骤:
    1. 给定n个权值作为n个叶节点,构造只含n个叶节点的二叉树。
    2. 在这棵树的n-1个非终端结点中,选择两个最小的权值 Wi和Wj,构造一个新的二叉树,把Wi和Wj替换为一个新的结点Wij,Wij的权值是Wi+Wj。
    3. 重复上述第二步,不断构造新的二叉树,直到所有结点中只有一个结点,即哈夫曼树构建完成。
    哈夫曼树的带权路径长度即树中所有叶子节点和根节点之间的路径长度,记作WPL(Weighted Path Length),根据下式可以计算WPL:
    WPL=∑i=1nWi*Di
哈夫曼编码树的带权路径长度
    其中Wi是第i个叶子节点的权值,而Di是第i个叶子节点到根节点的路径长度。所以,求哈夫曼树的带权路径长度的关键是求出每个叶子到根结点的路径长度。
    在求哈夫曼树的带权路径长度时,通常采用从上至下,从左往右的思想,按照层次遍历哈夫曼树,逐个计算每一个叶子节点到根节点的路径长度,再求和得到带权路径长度。具体来说,首先给根节点的路径长度赋初值为0,然后依次遍历每个叶子节点,当前叶子结点的路径长度等于它的父节点的路径长度加上1(因为有一条路径),然后累加得到带权路径长度。
    因此,求哈夫曼树的带权路径长度,可以采用从上至下,从左往右遍历哈夫曼树,计算每一个叶子节点到根节点的路径长度,再求和得到带权路径长度。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。