1. 霍夫曼树
输入:权值为(w1,w2,…wn)的n个节点
输出:对应的霍夫曼树
-
将(w1,w2,…wn)看做是有n棵树的森林,每个树仅有一个节点
-
在森林中选择根节点权值最小的两棵树进行合并,得到一个新的树,这两颗树分布作为新树的左右子树。新树的根节点权重为左右子树的根节点权重之和
-
将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林
-
重复步骤 2 和 3 直到森林里只有一棵树为止
下面我们用一个具体的例子来说明霍夫曼树建立的过程,我们有(a,b,c,d,e,f)共6个节点,节点的权值分布是(16,4,8,6,20,3)。
首先是最小的b和f合并,得到的新树根节点权重是7.此时森林里5棵树,根节点权重分别是16,8,6,20,7。此时根节点权重最小的6,7合并,得到新子树,依次类推,最终得到下面的霍夫曼树。