将树的节点追加到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
有三个子节点。关于这棵树的结构,似乎没有一致的逻辑。你怎么知道什么时候开始一个新的水平?