我正在使用Python编码霍夫曼树。我有一个常规函数,它接受要编码的字符串和霍夫曼树。它创建一个字符串字符数组和一个空数组,其条目将是与每个char对应的二进制路径。这个函数遍历字符串数组中的每个字符,调用函数2,它递归地搜索树,构建二进制代码并在找到字母后返回它。
一切正常 - 递归函数正确地在树中移动,找到并打印正确的路径。唯一的问题是,当我将该返回值分配给function1中的变量并将其附加到二进制数组时,它变为None
。你能否为这样的变量赋一个递归的return语句?任何帮助都会非常感激,因为我觉得我正处于完成这一过程的尖端。
这是我的代码:
def huffmanEncoder(s, t): """encodes string s with Tree t""" s = list(s) b = [] for i in range(len(s)): val = recursiveHuff(t, '', s[i]) print 'val:', val b.append(val) print b def recursiveHuff(tree, path, char): """given a tree, an empty string 'path', and a character, finds said char in tree and returns the binary path""" print 'looking for:\t', char, 'path:\t', path if not isLeaf(tree): recursiveHuff(getLeftChild(tree), path+'0', char) recursiveHuff(getRightChild(tree), path+'1', char) else: n = getNodeValue(tree) if n[1] == char: print 'found', char, 'at', path return path
答案 0 :(得分:2)
您的问题是recursiveHuff在您执行递归步骤时不会返回值。您想累积路径并返回它。正如您现在所做的那样,您对路径所做的更改是递归调用的本地更改。 (所以当你下降时它们沿着链传播,但是当你放松时它们不会备份)