首页 > 解决方案 > 使用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)

标签: pythontreebinary

解决方案


没有真正需要传递节点列表。每个节点可以只返回其自己子树的适当级别节点,并将邻居的组合留给父节点:

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))

推荐阅读