从树中创建保留树结构的列表

时间:2013-09-19 21:58:34

标签: python tree huffman-code

对于我正在编写的应用程序,我需要测试一个霍夫曼树的分支以获得某种特性。为此,我考虑了查询节点,并返回一个包含表示每个分支中项目的子列表的平面列表。

例如,如果我有这棵树:

-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语句的函数,但这不起作用。

有没有人对我如何做到这一点有任何想法?

1 个答案:

答案 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')] ,这是您想要的吗?