在Python中循环遍历树层次结构?

Pat*_*oki 2 python tree recursion

我是新来的,对 python 还很陌生!

我们有一份作业,我已经能够完成其余部分,但仍然存在一个问题:如果我有一个像这样的树层次结构:

root = [
    parent1 = [
        child1,
        child2 = [
            sub_child
        ]
        child3
    ],
    parent2 = [
        child1,
        child2
    ]
]
Run Code Online (Sandbox Code Playgroud)

它们都是一个名为 的类的实例TreeHierarchyClass,并且它们都有一个 name 属性,我如何找到具有我输入的名称的类?

我尝试使用 for 循环,但无法知道我需要多少个?获取名字很简单:

name = input("Enter name: ")
if name == TreeHierarchyObject.name:
    print("Found it!")
Run Code Online (Sandbox Code Playgroud)

但如何循环访问对象呢?

小智 5

您应该在这里使用简单的递归。该方法在一定程度上取决于子对象如何附加到父对象。

如果它们在列表中self.children,则此方法有效,我建议这样做。只需在类中定义以下方法:

def findObjectByName(self, name):
    if self.name == name:
        return self
    else:
        for child in self.children:
            match = child.findObjectByName(name)
            if match:
                return match
Run Code Online (Sandbox Code Playgroud)

编辑: 要使其适用于任何属性,而不仅仅是名称,请改用getattr()

def findObject(self, attr, value):
    if getattr(self, attr) == value:
        return self
    else:
        for child in self.children:
            match = child.findObject(attr, value)
            if match:
                return match
Run Code Online (Sandbox Code Playgroud)

只需调用root.findObjectByName("Sub Child!")or 即可使用第二种方法:root.findObject("name", "Sub Child!")