【问题标题】:Creating lists from trees which preserve the structure of the tree从保留树结构的树创建列表
【发布时间】:2013-09-21 00:13:28
【问题描述】:

对于我正在编写的应用程序,我需要测试 Huffman 树的分支以获得特定的属性。为此,我考虑过查询一个节点,并返回一个平面列表,其中包含代表每个分支中项目的子列表。

例如,如果我有这棵树:

-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() 语句替换打印语句,但没有成功。

有人对我该如何解决这个问题有任何想法吗?

【问题讨论】:

  • 而不是打印,只需对您尝试创建的列表进行 list.append() 调用。
  • 你的小树图中的“左”和“右”是什么意思?我无法理解这个
  • @OfirIsrael 从第一个节点开始,'a' 是左边,其余的是右边

标签: python tree huffman-code


【解决方案1】:

所以你正在寻找类似的东西:

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

【讨论】:

  • 不,我想要将树的分支(或节点的分支)作为两个列表的列表返回的东西:例如 [[a],[b,c,d] ] 或 [[b],[c,d]]。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多