Python 数据结构与算法 —— 哈弗曼树

1. 从扩充二叉树到哈弗曼树

扩充二叉树:对二叉树 T ,加入足够多的新叶节点(而不是任意),使 T 原有结点都变成度数为 2 的分支节点,得到的二叉树称为 T 的扩充二叉树。

对于扩充二叉树而言,

  • 扩充二叉树新增的结点称为其外部结点(external node);
  • 原树 T 的结点称为内部结点(internal node);
  • 规定空树的扩充二叉树仍为空树;

2. 哈弗曼树的实现

树节点的定义:

class BinTNode:
    def __init__(self, data, left, right):
        self.data = data
        self.left = left
        self.right = right

哈弗曼树节点的定义:

class HTNode(BinTNode):
    def __lt__(self, other):
        return self.data < other.data

用小顶堆实现哈弗曼树,极为简洁:

from Queue import PriorityQueue
def HuffmanTree(weights):
    trees = PriorityQueue()
    map(trees.put, weights)
    while trees.qsize() > 1:
        trees.put(trees.get() + trees.get())
    trees.get()
    原文作者:哈夫曼树
    原文地址: https://blog.csdn.net/lanchunhui/article/details/52398020
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞