使用python获取二叉树中给定级别上的所有节点
我试图在python二叉树中获取节点列表(objetcs),我在寻找在node对象中实现的递归函数,因此我将调用根节点上的函数,它将在childs节点上运行,直到达到特定级别,然后将在列表中返回这些节点 我目前的做法是,我不确定这是正确的还是最好的实施方式:使用python获取二叉树中给定级别上的所有节点,python,tree,binary,Python,Tree,Binary,我试图在python二叉树中获取节点列表(objetcs),我在寻找在node对象中实现的递归函数,因此我将调用根节点上的函数,它将在childs节点上运行,直到达到特定级别,然后将在列表中返回这些节点 我目前的做法是,我不确定这是正确的还是最好的实施方式: def get_level_nodes(self, nodes, level=1): if self.level > level: return nodes if self.level == level
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)
实际上不需要传递节点列表。每个节点只需返回其自身子树的适当级别节点,并将相邻节点的组合留给父节点:
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))
谢谢,我正在寻找实现的kiind,而不是将列表作为参数。第一种方法对我来说很好,因为我使用的是Python2.7,而您的第二种解决方案只兼容Python3.3+@ArthurReinhart-Yup,应该提到这一点。我添加了一个Python2版本的生成器实现。再次感谢@schwobasegl,我以前没有使用过生成器,只是因为您的建议,我一直在学习它们。我在这里学到了很多