@吴:wiki上的哈夫曼树是标准的生成步骤,老师这里举的例子是一种特殊情况,哈夫曼树构建的一般性方法在本科的教程上就写的很通俗了。
我用wiki里的值举个例子吧:原始集合的值是[2,3,4,4,5,7]
第一步:从原始集合中取出最小的两个值并将这两个值从原始集合中剔除,这两个最小的值相加得到一个新的值并加入原始集合,这两个小值作为这个新值的树叶,新值当然就是树根了。这一步执行之后原始集合就变成了这样:
[ ⑤, 4,4,5,7]
/ \
2 3
第二步:从更新后的集合中再取最小的两个值并剔除,同样相加得到新值加入到集合。这一步执行之后集合就变成了
[⑤, ⑧ ,5,7]
/ \ /\
2 3 4 4
第三步,重复以上步骤,你懂得。结果是:
[ ⑩, ⑧, 7]
/ \ / \
5 ⑤ 4 4
/ \
2 3
第四步,结果是:
[ ⑩, 15,]
/ \ / \
5 ⑤ 7 ⑧
/\ / \
2 3 4 4
最后一步,结果是:
(25) (打不出圆圈了,用这个代替,应该不难理解,嗯)
/ \
⑩ 15
/ \ / \
5 ⑤ 7 ⑧
/\ / \
2 3 4 4
wiki哈夫曼树链接:https://zh.wikipedia.org/wiki/%E9%9C%8D%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81
ps:大半夜手打,排版扎心
展开