给定权值为[1 ,2,3,4,5,6,7,8,9],构建一颗哈夫曼树,并且利用先序遍历打印。
时间: 2024-12-25 19:24:41 浏览: 13
哈夫曼树(Huffman Tree),又称为最优二叉树,是一种带权路径长度最短的二叉树,常用于数据压缩。给定一组权值,我们首先需要对这些权值进行排序,然后通过贪心算法构建树。以下是构建过程:
1. 将权值列表 [1, 2, 3, 4, 5, 6, 7, 8, 9] 按升序排列。
2. 取两个最小的节点作为新节点,它们的权重之和即为新节点的权重,然后将这两个节点添加到一个优先队列(通常是堆)中。
3. 从优先队列中取出两个最小节点合并,再添加回队列。
4. 重复步骤2和3,直到只剩下一个节点为止,这个节点就是哈夫曼树的根。
接下来,我们将按照先序遍历(根-左-右)的方式打印这颗哈夫曼树:
- 先打印根节点(初始是最小的两个节点合并后的结果)
- 再递归地访问左子树(当前根节点的左子节点)
- 最后访问右子树(当前根节点的右子节点)
由于这是一个文本交互环境,这里无法直接展示完整的过程,但你可以手动模拟上述步骤,或者使用编程语言如Python实现这个过程。下面是伪代码示例:
```python
# 定义节点结构
class Node:
def __init__(self, weight):
self.weight = weight
self.left = None
self.right = None
# 构建哈夫曼树
def build_huffman_tree(weights):
# ... (按步骤2-4实现)
# 先序遍历
def pre_order_traversal(node):
if node is not None:
print(node.weight)
pre_order_traversal(node.left)
pre_order_traversal(node.right)
# 示例权重
weights = [1, 2, 3, 4, 5, 6, 7, 8, 9]
build_huffman_tree(weights)
pre_order_traversal(huffman_root) # huffman_root是构建好的哈夫曼树的根节点
```
阅读全文