【问题标题】:Get all nodes on a given level in a binary tree with python使用python获取二叉树中给定级别上的所有节点
【发布时间】:2018-09-04 17:22:50
【问题描述】:

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

【问题讨论】:

    标签: python tree binary


    【解决方案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))
    

    【讨论】:

    • 谢谢,我正在寻找那种不将列表作为参数传递的实现。第一种方法对我来说很好,因为我使用的是 python 2.7,而你的第二种解决方案只兼容 python 3.3+
    • @ArthurReinhart 是的,应该提到这一点。我添加了生成器实现的 Python2 版本。
    • 再次感谢@schwobaseggl,我以前没有使用过生成器,只是因为你的支持而一直在学习它们。我在这里学到了很多stackoverflow.com/a/231855/8002694
    猜你喜欢
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2018-07-25
    • 2018-07-10
    • 2018-11-25
    相关资源
    最近更新 更多