对于我正在编写的应用程序,我需要测试一个霍夫曼树的分支以获得某种特性。为此,我考虑了查询节点,并返回一个包含表示每个分支中项目的子列表的平面列表。
例如,如果我有这棵树:
-a
|-b
|-c
|-d
我想通过查询最上面的项目('a')创建一个列表并返回以下列表:
[[a],[b,c,d]]
如果我查询第二片叶子('b'),我想回来:
[[b].[c,d]]
等
到目前为止,我将我的树存储为像这样的元组:
(1.0,(0.5,(0.25, (0.125,'d'),(0.125,'c')),(0.25,'b')),(0.5,'a'))
我有一个在叶子上打印信息的功能:
def printTree(tree, prefix = ''):
if len(tree) == 2:
print tree[1], prefix
else:
printTree(tree[1], prefix + '0')
printTree(tree[2], prefix + '1')
我尝试创建一个用list()语句替换print语句的函数,但这不起作用。
有没有人对我如何做到这一点有任何想法?
答案 0 :(得分:0)
所以你正在寻找类似的东西:
def printTree(tree, prefix = '', res=[]):
if len(tree) == 2:
res.append((tree[1], prefix))
print tree[1], prefix
else:
printTree(tree[1], prefix + '0', res=res)
printTree(tree[2], prefix + '1', res=res)
return res
res
会在递归时保留您的结果,最后会返回。
使用您的树,这将返回:[('d', '000'), ('c', '001'), ('b', '01'), ('a', '1')]
,这是您想要的吗?