python - 使用python获取二叉树中给定级别上的所有节点
问题描述
我正在尝试在python二叉树中获取节点(objetcs)列表,我正在寻找在节点对象中实现的递归函数,所以我将在根节点上调用函数,它会在子节点上下降直到达到特定级别,然后将返回列表中的那些节点
我目前的方法,我不确定这是否正确或实现它的最佳方法:
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))
推荐阅读
- java - 找到图像左上角和右下角的第一个白色像素?
- vim - 如何安装同时支持 python2 和 python3 的 vim?
- c++ - C++ 将可变参数模板化参数转发到元组
- html - 当我尝试登录时,iframe 网站正在重新加载
- html - 硒 python 按钮
- python - python3.8 venv 在 windows 上不起作用,而 python3.5 可以
- f# - 具有多个可选参数的方法的包装器
- neo4j - 从纪元日期按月聚合 - neo4j cypher
- node.js - 如何从节点从谷歌驱动器下载文件并将进度流发送到客户端?
- json - 未处理的异常:类型 '_InternalLinkedHashMap
' 不是类型 'String' 的子类型