使用python在二叉树中获取给定级别上的所有节点

时间:2018-09-04 08:16:30

标签: python tree binary

我正在尝试获取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)

1 个答案:

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