使用python构造一棵哈夫曼树
时间: 2023-10-24 07:05:30 浏览: 104
hafumanshu.rar_构造哈夫曼树
好的,我可以为您解答如何使用Python构造一棵哈夫曼树。
哈夫曼树是一种常用于数据压缩的树形结构,它的构造过程可以分为以下几个步骤:
1. 统计各字符在文本中出现的次数
2. 将出现次数存储为节点权值
3. 将权值列表按升序排列
4. 取出前两个节点,并将它们合并为一颗新节点,权值为两者之和
5. 将新节点插入列表中,并按权值大小重新排序
6. 重复步骤4、5,直到列表只剩下一颗节点,即为哈夫曼树的根节点。
以下是使用Python实现的代码:
```python
class Node:
def __init__(self, value, char=None):
self.value = value
self.char = char
self.left = None
self.right = None
def create_tree(freq):
nodes = [Node(freq[i], i) for i in range(len(freq))] # 创建节点列表
while len(nodes) > 1:
nodes.sort(key=lambda x: x.value) # 按value大小排序
left = nodes.pop(0)
right = nodes.pop(0)
parent = Node(left.value+right.value) # 创建新节点并合并左右节点
parent.left = left
parent.right = right
nodes.append(parent) # 将新节点插入列表
root = nodes[0] # 列表中唯一剩下的节点即为根节点
return root
freq = [5, 9, 12, 13, 16, 45] # 各字符出现次数
root = create_tree(freq)
```
以上代码中,先定义了节点类Node,包括节点权值value、节点字符char、左右子节点left、right四个属性。create_tree函数中,先根据各字符出现次数创建节点列表,然后通过排序和合并节点的方式,逐步构建哈夫曼树,最后返回根节点。
阅读全文