数据结构根据哈夫曼树求哈夫曼编码代码实现
时间: 2023-07-11 13:20:35 浏览: 137
下面是根据哈夫曼树求哈夫曼编码的代码实现,假设我们已经有了哈夫曼树的数据结构:
```python
class HuffmanNode:
def __init__(self, val=None, freq=None, left=None, right=None):
self.val = val
self.freq = freq
self.left = left
self.right = right
class HuffmanTree:
def __init__(self, char_freqs):
nodes = [HuffmanNode(val=k, freq=v) for k, v in char_freqs.items()]
while len(nodes) > 1:
nodes = sorted(nodes, key=lambda x: x.freq)
left, right = nodes.pop(0), nodes.pop(0)
parent = HuffmanNode(freq=left.freq + right.freq, left=left, right=right)
nodes.append(parent)
self.root = nodes[0]
def get_code_helper(self, node, code_dict, code):
if node.val:
code_dict[node.val] = code
else:
self.get_code_helper(node.left, code_dict, code + '0')
self.get_code_helper(node.right, code_dict, code + '1')
def get_code(self):
code_dict = {}
self.get_code_helper(self.root, code_dict, '')
return code_dict
```
其中,`HuffmanNode`表示哈夫曼树的节点,`HuffmanTree`表示哈夫曼树的数据结构。在`__init__`方法中,我们根据给定的字符频率构建哈夫曼树。在`get_code_helper`方法中,我们利用递归遍历哈夫曼树的每个节点,当遍历到叶子节点时,将该节点对应的字符及其哈夫曼编码加入到`code_dict`中。最后,`get_code`方法调用`get_code_helper`方法来获取所有字符的哈夫曼编码。
阅读全文