今天做远景的笔试题,遇到了这么一道题,求{11,8,6,5,2}构成的哈夫曼树的加权路径长度。
好长时间没看数据结构,居然忘记怎么求了,该死。
考完下百度,好多答案居然都是错的。或者是光有答案没有过程。在这里把哈夫曼树的构建和加权路径长度写一下。
1.构建过程
一句话总结:永远让最小的两个数相加。

1.对数组按从小到大排序。对于上面这个{11,8,6,5,2}数组,排序完就是{2,5,6,8,11}
2.将最小的两个数加起来,求得一个和记做sum
3.使用sum代替这两个最小数。此时数组为{7,6,8,11}
4.继续重复步骤1,2。排序得{6,7,8,11},然后求和得{13,8,11},再排序得{8,11,13},再将8,11加起来,求和排序得{13,19},再将13,19加起来,得32.
5.得到的哈夫曼树就是下面这个

在这里插入图片描述
2.加权路径长度:权值*路径数。权值就是结点值,路径数就是顶点到结点经历边的个数 。在这里就是: (8+11)x2+6x2+(2+5)x3=71

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐