我正在尝试获取python二叉树中的节点(objetcs)列表,我正在寻找在node对象中实现的递归函数,因此我将在根节点上调用函数,并且它将继续下去子节点直到达到特定级别,然后将这些节点返回到列表中
我目前的方法,我不确定这是正确的还是实现它的最佳方法:
def get_level_nodes(self, nodes, level=1):
if self.level > level:
return nodes
if self.level == level:
nodes.append(self)
return nodes
for child in self.child_id:
nodes += child.get_level_nodes(node, level)
return nodes
# Getting the list
nodes_list = root_node.get_level_nodes([], 3)
答案 0 :(得分:1)
真正不需要传递节点列表。每个节点都可以返回自己子树的相应级别节点,并将邻居的组合留给父节点:
def get_level_nodes(self, level=1):
if self.level > level:
return []
if self.level == level:
return [self]
# child_id seems an odd name
return [n for c in self.children for n in c.get_level_nodes(level)]
一种不占用每个子树中间列表的节省空间的实现方法是生成器函数:
def get_level_nodes(self, level=1):
if self.level > level:
return
if self.level == level:
yield self
else:
for c in self.children:
for n in c.get_level_nodes(level):
yield n
# or in Python3
# yield from c.get_level_nodes(level)
nodes_list = list(root_node.get_level_nodes(3))