Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将树的节点追加到python列表_Python_List_Tree - Fatal编程技术网

将树的节点追加到python列表

将树的节点追加到python列表,python,list,tree,Python,List,Tree,我有一棵这样的树: A / | \ B C D / \ | / | \ E F G H I J 我试图将树的节点附加到一个空列表中 使列表看起来像: [[A], [B, C, D], [E, F, G, H, I, J]] 假设我有一个根节点a,我不知道我的树有多深。 如何以上述格式将树中的节点附加到空列表中 我尝试了广度优先搜索,但我的列表长度比 树的深度。将节点的每个新深度追加为一个新列表 从空列表开

我有一棵这样的树:

         A 
      /  |   \
    B    C    D
  /  \   |   / | \
 E    F  G  H  I  J
我试图将树的节点附加到一个空列表中 使列表看起来像:

[[A], [B, C, D], [E, F, G, H, I, J]]
假设我有一个根节点a,我不知道我的树有多深。 如何以上述格式将树中的节点附加到空列表中

我尝试了广度优先搜索,但我的列表长度比
树的深度。

将节点的每个新深度追加为一个新列表

从空列表开始:
tree=[]

  • 为当前深度创建新的内部列表
  • 在列表中的当前深度追加每个元素:
    tree[depth]。追加(元素)
  • 转到下一个深度并重复

  • 给定如下节点实现:

    class Node:
        def __init__(self, name):
            self.name = name
            self.children = []
            
        def __repr__(self):
            return f'Node({self.name})'
    
    您可以创建节点并使用以下各项排列图形:

    nodes = {letter: Node(letter) for letter in 'ABCDEFGHIJ'}
    
    nodes['A'].children.extend([nodes['B'], nodes['C'], nodes['D']])
    nodes['B'].children.extend([nodes['E'], nodes['F']])
    nodes['C'].children.extend([nodes['G']])
    nodes['D'].children.extend([nodes['H'], nodes['I'], nodes['J']])
    
    现在,您可以从根节点开始,不断创建一个新的节点列表,直到使用一个简单的生成器用完为止:

    def make_lists(root):
        current = [root]
        while current:
            yield current
            current = [c for n in current for c in n.children]
        
    list(make_lists(nodes['A']))
    
    当不再有子项时,
    while
    循环将结束,导致:

    [[Node(A)],
     [Node(B), Node(C), Node(D)],
     [Node(E), Node(F), Node(G), Node(H), Node(I), Node(J)]]
    

    您可以使用列表的
    append
    方法将任何内容追加到列表中。如果生成的列表太长,则表示您太频繁地使用了
    append
    。或者您添加到了错误的列表。我可以使用append,但我的问题是列表的长度应该与树的深度匹配如果我天真地使用append,我的列表将如下所示:[A,B,C,D,E,F,F,G,I,J],我希望我的列表看起来像[[A],[B,C,D],[E,F,G,I,J]]@mkrieger1我认为你没有正确阅读我的问题。为什么
    B
    有两个子节点,
    C
    有一个子节点,
    D
    有三个子节点。关于这棵树的结构,似乎没有一致的逻辑。你怎么知道什么时候开始一个新的水平?