给定权值集合{15, 03, 14, 02, 06, 09, 16, 17}, 构造相应的哈夫曼树, 并计算它的带权外部路径长度
时间: 2023-10-05 14:14:12 浏览: 681
好的,让我来回答你的问题。
首先,我们需要根据给定的权值集合构造哈夫曼树。构造哈夫曼树的步骤如下:
1. 将权值从小到大排序,得到{02, 03, 06, 09, 14, 15, 16, 17}。
2. 取出权值最小的两个结点,构造一棵新树,权值为这两个结点的权值之和。
3. 将这棵新树插入到集合中,同时将插入的两个结点从集合中删除。
4. 重复步骤2和3,直到集合中只剩下一个结点,这个结点就是哈夫曼树的根结点。
按照上述步骤,我们可以得到如下的哈夫曼树:
82
/ \
/ \
48 34
/ \ / \
22 26 14 20
/ \ | | |
9 13 6 8 11
这棵哈夫曼树的带权外部路径长度为:
WPL = (9*3) + (13*3) + (6*3) + (8*3) + (14*2) + (20*2) + (22*1) + (26*1)
= 27 + 39 + 18 + 24 + 28 + 40 + 22 + 26
= 224
因此,这棵哈夫曼树的带权外部路径长度为224。
希望我的回答能够帮助你解决问题,有其他问题可以继续问我哦。
相关问题
设给定一个权值集合 W=(3,5,7,9,11),要求根据给定的权值集合构造一棵哈夫曼树并计算哈夫曼树的 带权路径长度 WPL。
哈夫曼树的构造过程如下:
1. 将所有权值按照从小到大的顺序排列,得到:(3,5,7,9,11)。
2. 取出权值最小的两个节点3和5,将它们合并成一个新节点,权值为8。此时得到的节点集合为(7,8,9,11)。
3. 取出权值最小的两个节点7和8,将它们合并成一个新节点,权值为15。此时得到的节点集合为(9,11,15)。
4. 取出权值最小的两个节点9和11,将它们合并成一个新节点,权值为20。此时得到的节点集合为(15,20)。
5. 最后将权值为15和20的节点合并成一个根节点,得到哈夫曼树。
哈夫曼树如下图所示:
```
35
/ \
15 20
/ \
7 8
/ \
3 5
```
根据哈夫曼树的定义,每个叶子节点都对应一个权值,而每个非叶子节点都对应一个权值之和。因此,我们可以通过遍历哈夫曼树来计算带权路径长度WPL。
在上面的哈夫曼树中,有5个叶子节点,分别对应权值3,5,7,9,11。它们的深度分别为2,2,1,1,1。因此,带权路径长度WPL为:
WPL = 2*3 + 2*5 + 1*7 + 1*9 + 1*11 = 6 + 10 + 7 + 9 + 11 = 43
因此,构造出的哈夫曼树的带权路径长度WPL为43。
给定权值构造哈夫曼树
哈夫曼树是一种带有权值的二叉树,它的构造方法是通过贪心策略,将权值最小的两个节点合并成一个新节点,直到最后只剩下一个节点为止。下面是给定权值构造哈夫曼树的详细步骤:
1. 将所有权值作为叶子节点,构造一个节点集合。
2. 从节点集合中选出两个权值最小的节点,合并成一个新节点,权值为两个节点的权值之和。
3. 将新节点加入节点集合中,并删除原来的两个节点。
4. 重复步骤2和3,直到节点集合中只剩下一个节点为止,这个节点就是哈夫曼树的根节点。
下面是一个示例,假设给定的权值为[5, 9, 12, 13, 16, 45]:
首先构造出6个叶子节点:
```
5 9 12 13 16 45
/ / / / / /
A B C D E F
```
然后按照上面的步骤,合并权值最小的两个节点:
```
5 9 12 13 16 45
/ / / / /
A B C D ┌────F
│
61
│
└────E
```
继续合并权值最小的两个节点:
```
5 9 12 13 16 45
/ / / / / /
A B C ┌────D E F
│
25
│
└─────┐
│
36
│
└────C
```
继续合并权值最小的两个节点:
```
5 9 12 13 16 45
/ / / / / /
A B ┌─────┐ D E F
│ │
25 36
│ │
└─────┘
│
61
│
└────C
```
最后只剩下一个节点,它就是哈夫曼树的根节点:
```
111
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
5 106
/ \ / \
/ \ / \
/ \ / \
A B C 61
/ \
/ \
D E
```
因此,给定权值构造出的哈夫曼树就是上面的树形结构。
阅读全文