当我尝试将一个节点推到huffman树的堆上时,会得到以下错误:
类型错误:“heapnode”和“heapnode”的实例之间不支持“

    class HuffmanCoding:
        def __init__(self, path):
            self.path = path
            self.heap = []
            self.codes = {}
            self.reverse_mapping = {}

        def make_heap(self, frequency):
            for key in frequency:
                node = HeapNode(key, frequency[key])
                heapq.heappush(self.heap, node)

节点类:
    class HeapNode:
        def __init__(self, char, freq):
            self.char = char
            self.freq = freq
            self.left = None
            self.right = None

        def __cmp__(self, other):
            if(other == None):
                return -1
            if(not isinstance(other, HeapNode)):
                return -1
            return self.freq > other.freq

错误是由以下原因引起的:
    heapq.heappush(self.heap, node)

Full code by github.com/bhrigu123

最佳答案

当前版本的程序在这里工作。我测试过了。https://github.com/bhrigu123/huffman-coding/blob/master/huffman.py

#Modified code here for reference
class HeapNode:
    def __init__(self, char, freq):
        self.char = char
        self.freq = freq
        self.left = None
        self.right = None

    # defining comparators less_than and equals
    def __lt__(self, other):
        return self.freq < other.freq

    def __eq__(self, other):
        if(other == None):
            return False
        if(not isinstance(other, HeapNode)):
            return False
        return self.freq == other.freq

07-28 03:01