构造哈夫曼树的过程是这样的
一、构成初始集合
对给定的n个权值{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合F={T1,T2,T3,...,Ti,...,Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结点,它的左右子树均为空。(为方便在计算机上实现算法,一般还要求以Ti的权值Wi的升序排列。)
二、选取左右子树
在F中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之和。
三、删除左右子树
从F中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到集合F中。
四、重复二和三两步,
重复二和三两步,直到集合F中只有一棵二叉树为止。
举个例子
有个序列是(7,9,2,6,32,3,21,10)
叫你求哈夫曼树
步骤一:把这些点都看成是一个只有根结点的树的集合F
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img1.ph.126.net/Ijsw5ajkxOWF55UXAgWtqw==/2763802796339229141.jpg)
步骤二,选2个值最小的树
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img1.ph.126.net/RTtrTGc4c0ju2YSOxaADNw==/2571555387245852911.jpg)
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img8.ph.126.net/yagwCO_ziDhzfWPzr508-A==/1306606841908162628.jpg)
步骤三:在这些树的集合F中删除这2棵树
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img9.ph.126.net/p1x9m1WywoGcjXx5QaQ4Ng==/1008243366594866839.jpg)
然后把构成一颗二叉树
变成了(5=2+3)
然后把这个树加入到集合F
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img9.ph.126.net/p1x9m1WywoGcjXx5QaQ4Ng==/1008243366594866839.jpg)
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img0.ph.126.net/DLnLb0ScyaxwJWfgm-nNcQ==/674976994169453680.jpg)
5代表这棵树的权值
然后继续上述步骤
肯定是选5和6
把这2个构成二叉树
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img6.ph.126.net/eNtNDEiLy_MhSe_Nt8f3Gg==/669628969611949626.jpg)
在F中删除56加入11这棵树
变成了
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img8.ph.126.net/i-8LdIkeZ8TSmk217wghAQ==/2532993315436490718.jpg)
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img6.ph.126.net/eNtNDEiLy_MhSe_Nt8f3Gg==/669628969611949626.jpg)
继续上述步骤
选7和9
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img5.ph.126.net/dkgyioRAv9NsiDUOttACBg==/24769797967834065.jpg)
在F中删除7和9
加入16这棵树
变成了
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img2.ph.126.net/AtDFpZ4B_eTjDtHJgi3PPA==/3094254418997540812.jpg)
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img5.ph.126.net/dkgyioRAv9NsiDUOttACBg==/24769797967834065.jpg)
继续上述步骤
选10和11
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img8.ph.126.net/5QdEb3JtvBQkjvemRJNhrQ==/99079191819455368.jpg)
在F中删除10和11加入21这棵树
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img4.ph.126.net/dw2cRNj2wNvFvrF50OJ3LA==/2870200337535857984.jpg)
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img8.ph.126.net/5QdEb3JtvBQkjvemRJNhrQ==/99079191819455368.jpg)
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img5.ph.126.net/dkgyioRAv9NsiDUOttACBg==/24769797967834065.jpg)
继续上述步骤
选16和21(有2个21,随便选哪个)
我选那个只有一个根结点的21好了
16和21构成二叉树
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img0.ph.126.net/5XHUdSPUxfr5l3EfoIdXbw==/2891592435765872470.jpg)
在F中删除这16和21这两棵树
加入37这棵树
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img3.ph.126.net/BZb1UHyXaqxOiNaBISQJIw==/1116892707605164513.jpg)
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img8.ph.126.net/5QdEb3JtvBQkjvemRJNhrQ==/99079191819455368.jpg)
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img0.ph.126.net/5XHUdSPUxfr5l3EfoIdXbw==/2891592435765872470.jpg)
继续上述步骤
选21和32
构成二叉树
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img4.ph.126.net/C04IYBVC_VBiOVKrAF_H3A==/2397040901685240694.jpg)
在F中删除21和32这2两棵树
加入53这棵树
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img4.ph.126.net/C04IYBVC_VBiOVKrAF_H3A==/2397040901685240694.jpg)
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img0.ph.126.net/5XHUdSPUxfr5l3EfoIdXbw==/2891592435765872470.jpg)
还是继续上面步骤
把F中的两棵树合并成一棵树
![哈夫曼树的构造 - FlyMosquito - 伴随着你](http://img8.ph.126.net/d5yAuegC-uliyQs2d5RlHw==/1108448458303842938.jpg)