首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >霍夫曼编码错误

霍夫曼编码错误
EN

Stack Overflow用户
提问于 2013-04-25 15:12:07
回答 1查看 212关注 0票数 0

我正在尝试实现霍夫曼编码算法。

我编写了以下代码

代码语言:javascript
复制
def make_leaf(symbol,weight):
    return (symbol,weight)

def is_leaf(x):
    return isinstance(x,tuple) and \
           len(x)==2 and \
           isinstance(x[0],str) and \
           isinstance(x[1],int)

def get_leaf_symbol(leaf):
    return leaf[0]

def get_leaf_freq(leaf):
    return leaf[1]

def get_left_branch(huff_tree):
    return huff_tree[0]

def get_right_branch(huff_tree):
    return huff_tree[1]


def get_symbols(huff_tree):
    if is_leaf(huff_tree):
        return [get_leaf_symbol(huff_tree)]
    else:
        return huff_tree[2]

def get_freq(huff_tree):
    if is_leaf(huff_tree):
        return get_leaf_freq(huff_tree)
    else:
        huff_tree[3]


def make_huffman_tree(left_branch,right_branch):
    return [left_branch,
            right_branch,
            get_symbols(left_branch) + get_symbols(right_branch),
            get_freq(left_branch) + get_freq(right_branch)]

但是,当我尝试通过编写以下代码来构建二叉树时

代码语言:javascript
复制
ht01 = make_huffman_tree(make_leaf('A', 4),
                        make_huffman_tree(make_leaf('B',2),
                                          make_huffman_tree(make_leaf('D', 1),
                                                         make_leaf('C', 1))))

我得到一个类似下面这样的错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Users\Swadesh\Documents\Anmol\Python\huffman trial.py", line 47, in <module>
    make_leaf('C', 1))))
  File "C:\Users\Swadesh\Documents\Anmol\Python\huffman trial.py", line 41, in make_huffman_tree
    get_freq(left_branch) + get_freq(right_branch)]
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

我不知道如何解决这个错误。有人能帮帮我吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-04-25 15:20:33

您的get_freq()函数的最后一行缺少'return‘。

如果函数没有返回任何内容,Python将使用None作为返回值。

然后,当您尝试在加法中使用此返回值时,您会得到发布的错误(您不能将None添加到整数中)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16208536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档