给出5个权值{1,2,5,6,7},请画出所构成的哈夫曼树

2025-05-13 14:26:31
推荐回答(1个)
回答1:

五个权值是 1 2 5 6 7

(1) 从小到大排序 1 2 5 6 7 (这是有序序列)
(2) 每次提取最小的两个结点,取结点1和结点2,组成新结点N3,其权值=1+2=3,
    取数值较小的结点作为左分支,结点1作为左分支,而结点2就作为右分支.
(3) 将新结点N3放入有序序列,保持从小到大排序:
    N3 5 6 7 
(4) 重复步骤(2),提取最小的两个结点,N3与结点5组成新结点N8,其权值=3+5=8,
    N3数值较小,作为左分支,而结点5就作为右分支.
(5) 将新结点N8放入有序序列,保持从小到大排序:
    6 7 N8
(6) 重复步骤(2),提取最小的两个结点,结点6与结点7组成新结点N13,其权值=6+7=13,
    结点6的数值较小,作为左分支,结点7就作为右分支.
(7) 将新结点N13放入有序序列,保持从小到大排序:
    N8 N13
(8) 重复步骤(2),提取剩下的两个结点,N8与N13组成新结点N21,其权值=8+13=21,
    数值较小的N8作为左分支,N13就作为右分支.
    最后得到"哈夫曼树":

         N21
        /    \
       N8    N13
      / \    / \
     N3  5  6   7
    / \
   1   2


哈夫曼编码:
规定哈夫曼树的左分支代表0,右分支代表1.
得出所有结点的 哈夫曼编码:
权值7 : 11
权值6 : 10
权值5 : 01
权值2 : 001
权值1 : 000


哈夫曼树的带权路径长度是:
7*2 + 6*2 + 5*2 + 2*3 + 1*3 = 45