华为OD E卷 #18 生成哈夫曼树

题目

给定长度为 n 的无序的数字数组,每个数字代表二叉树的叶子节点的权值,数字数组的值均大于等于1。

请完成一个函数,根据输入的数字数组,生成哈夫曼树,并将哈夫曼树按照中序遍历输出。

为了保证输出的二叉树中序遍历结果统一,增加限制:二叉树节点中,左节点权值小于右节点权值,根节点权值为左右节点权值之和。当左右节点权值相同时,左子树高度小于等于右子树高度。

输入 5 5 15 40 30 10

输出 40 100 30 60 15 30 5 15 10

# -*- coding: utf-8 -*-
import heapq

# 定义哈夫曼树的节点类
class Node:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

    # 使节点可在优先队列中进行比较
    def __lt__(self, other):
        return self.value < other.value

# 哈夫曼树类
class HuffmanTree:
    def __init__(self, arr):
        self.root = 

你可能感兴趣的:(华为OD机试E卷,华为od,算法,数据结构)