def gen_huffman_tree(arr): """生成霍夫曼树""" li = list() for v in arr: node = Node(v) li.append(node) while len(li) > 1: # 根据节点的权重值对节点进行排序 li.sort(key=lambda n: n.data) # 取出前两个树构造新树 n1 = li.pop(0) n2 = li.pop(0) new_node = Node(n1.data + n2.data) new_node.lchild = n1 new_node.rchild = n2 li.append(new_node) return BinaryTree(li.pop(0))