设abcdef六个字母出现的频度分别为8,3,9,7,10,1,求构造出的哈夫曼树
时间: 2023-10-30 19:08:10 浏览: 182
首先按照频度从小到大排序,即f(1)、b(3)、d(7)、a(8)、c(9)、e(10)。
1. 取出频率最小的两个节点f(1)、b(3),构造一棵根节点权值为它们之和的二叉树,左子树为f(1),右子树为b(3)。得到第一层的两个节点f(1)和b(3),以及它们的父节点(4)。
```
f(1) b(3)
\ /
(4)
```
2. 取出频率最小的两个节点d(7)、a(8),构造一棵根节点权值为它们之和的二叉树,左子树为d(7),右子树为a(8)。得到第二层的两个节点d(7)和a(8),以及它们的父节点(15)。
```
f(1) b(3)
\ /
(4)
/ \
d(7) a(8)
\ /
(15)
```
3. 取出频率最小的两个节点c(9)、e(10),构造一棵根节点权值为它们之和的二叉树,左子树为c(9),右子树为e(10)。得到第三层的两个节点c(9)和e(10),以及它们的父节点(19)。
```
f(1) b(3)
\ /
(4)
/ \
d(7) a(8)
\ /
(15)
/ \
c(9) e(10)
\ /
(19)
```
4. 取出频率最小的两个节点(4)、d(7),构造一棵根节点权值为它们之和的二叉树,左子树为(4),右子树为d(7)。得到第四层的两个节点(4)和d(7),以及它们的父节点(11)。
```
f(1) b(3)
\ / \
(4) d(7) a(8)
/ \ \ /
(11) a(8) c(9) e(10)
/ \
f(1) b(3)
\ /
(4)
```
5. 取出频率最小的两个节点(11)、c(9),构造一棵根节点权值为它们之和的二叉树,左子树为(11),右子树为c(9)。得到第五层的两个节点(11)和c(9),以及它们的父节点(20)。
```
f(1) b(3)
\ / \
(4) d(7) a(8)
/ \ \ / \
(11) a(8) c(9) e(10)
/ \ / \ /
f(1) b(3) (11) e(10)
\ / /
(4) c(9)
\ /
(20)
```
6. 取出最后剩余的两个节点(20)、e(10),构造一棵根节点权值为它们之和的二叉树,左子树为(20),右子树为e(10)。得到最终的哈夫曼树。
```
f(1) b(3)
\ / \
(4) d(7) a(8)
/ \ \ / \
(11) a(8) c(9) e(10)
/ \ / \ / \
f(1) b(3) (11) e(10) (20)
\ / /
(4) c(9)
\ /
(20)
```
因此,构造出的哈夫曼树如上图所示。
阅读全文