给定一组权值(5,9,11,2,7,16),试设计相应的哈夫曼树,画出并截图提交。
时间: 2024-06-05 07:11:16 浏览: 136
首先,我们需要根据权值构建小根堆(也可以使用大根堆),然后不断取出权值最小的两个节点,合并成一个新节点,直到堆中只剩下一个节点,这个节点即为哈夫曼树的根节点。
具体步骤如下:
1. 将权值构建成小根堆:
<img src="https://img-blog.csdn.net/20180723093623410?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NjaGVtYXMvcXBfc2VhcmNo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80" width="400" />
2. 取出堆中权值最小的两个节点(2和5),合并成一个新节点,新节点的权值为2+5=7,并将新节点插入堆中:
<img src="https://img-blog.csdn.net/20180723093635353?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NjaGVtYXMvcXBfc2VhcmNo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80" width="400" />
3. 再次取出堆中权值最小的两个节点(7和7),合并成一个新节点,新节点的权值为7+7=14,并将新节点插入堆中:
<img src="https://img-blog.csdn.net/20180723093648477?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NjaGVtYXMvcXBfc2VhcmNo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80" width="400" />
4. 再次取出堆中权值最小的两个节点(9和11),合并成一个新节点,新节点的权值为9+11=20,并将新节点插入堆中:
<img src="https://img-blog.csdn.net/20180723093703105?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NjaGVtYXMvcXBfc2VhcmNo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80" width="400" />
5. 再次取出堆中权值最小的两个节点(14和16),合并成一个新节点,新节点的权值为14+16=30,并将新节点插入堆中:
<img src="https://img-blog.csdn.net/20180723093716684?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NjaGVtYXMvcXBfc2VhcmNo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80" width="400" />
6. 最后,取出堆中唯一的节点(30),即为哈夫曼树的根节点:
<img src="https://img-blog.csdn.net/20180723093732740?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NjaGVtYXMvcXBfc2VhcmNo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80" width="400" />
因此,给定权值(5,9,11,2,7,16)的哈夫曼树如下所示:
<img src="https://img-blog.csdn.net/20180723093743808?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NjaGVtYXMvcXBfc2VhcmNo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80" width="400" />
阅读全文