二进制
二叉树对应的哈夫曼编码很好理解,相当于二进制编码,
每次从n个数的集合中取出最小的两个数合并,将合并
结果加入原集合中,递归处理即可。
k进制
当处理k进制编码时,和原来的处理一样,只不过每次
从集合中取出最小的k的数合并为一个新的结点添加到
原集合中,每这样操作一次,集合中会减少k个点新增
1个点,即每次操作集合会减少(k−1)个点,最后只会
剩下1个点,一共减少了(n−1)个点,但是问题是
(k−1)不一定整除 n−1,这样最后不一定剩下最
够k个点合并,所以我们可以添加个若干个权值为0的点使得(k−1)|(n−1).
由于新增结点的权值为0,计算带权路径长度不会影响到最后的结果。