Python 使用继承返回树列表

Python 使用继承返回树列表,python,inheritance,tree,Python,Inheritance,Tree,树(如继承树)是一种数据结构 具有父节点和子节点。比如说 A / | B C / | | D E F 我们将把树表示为一个以节点名为键的字典,并且 子名称和值的列表 {"A":["B", "C"], "B":["D","E"], "C":["F"], "D":[], "E":[], "F":[]} 考虑每个有序列表,并使用递归遍历该列

树(如继承树)是一种数据结构 具有父节点和子节点。比如说

               A
              /  |
             B     C
            / |     |
           D   E     F
我们将把树表示为一个以节点名为键的字典,并且 子名称和值的列表

{"A":["B", "C"], "B":["D","E"], "C":["F"], "D":[], "E":[], "F":[]}
考虑每个有序列表,并使用递归遍历该列表 “深度优先”

在深度优先遍历期间,按访问顺序返回一串字母。 对于本例,系统应返回“ABDECF”

我非常理解继承,我只是不明白在这种情况下我应该如何处理它。任何帮助都将不胜感激

class Program4:
    def __init__(self):
        self.counter=0

    def traverse(self, parent, tree):
        self.counter += 1 # Leave this counter alone

        #@todo - fix this.
        #   call recursion with self since instance method
        #  This is doable in no more than six lines of code

        pass

if __name__ == "__main__":
    tree = {"A":["B", "C"], "B":["D","E"], "C":["F"], "D":[], "E":[], "F":[]}

    print("Tree:",tree)
    p=Program4()
    print("Depth first:",p.traverse("A",tree))

类似于以下内容的操作即可:

class Program4:
    # ...
    def traverse(self, parent, tree):
        # ...
        s = parent
        for child in tree.get(parent, []):
            s += self.traverse(child, tree)
        return s
基本情况是一个没有子节点的叶节点,在这种情况下(您可以验证),将返回父节点本身。在所有其他情况下,父级子树的遍历都会附加到父级子树上

您可以使用
str.join
和生成器在一行程序中完成此操作:

# ...
def traverse(self, parent, tree):
    return parent + ''.join(self.traverse(c, tree) for c in tree.get(parent, []))

>>> p = Program4()
>>> print("Depth first:", p.traverse("A", tree))
Depth first: ABDECF

您是否尝试过执行
遍历
?下面是对您正在寻找的算法的高级解释:
# ...
def traverse(self, parent, tree):
    return parent + ''.join(self.traverse(c, tree) for c in tree.get(parent, []))

>>> p = Program4()
>>> print("Depth first:", p.traverse("A", tree))
Depth first: ABDECF