打印族树直到某个级别| Python 3

时间:2017-12-02 22:45:31

标签: python-3.x recursion tree

我正在努力使用一个递归函数来打印一个家族树,直到某个"深度/水平"。

我已经定义了类" Person"每个人都有一些后代,所以我们说:

>>> george.children
[<__main__.Person object at 0x000002C85FB45A58>]
>>> george.name
'George'

我想打印家谱,每一代都用4个空格分隔,例如:

>>> family_tree(george, level = 2)
George
    Michael
        Juliet
    Peter
        Mary

乔治是0级,然后他的两个儿子是1级等等。

你有任何想法如何使用递归写这个?我将不胜感激。

1 个答案:

答案 0 :(得分:0)

你可以使用递归。在每个更深层次的递归中,您应该再生成4个空格。因此,为此目的,您可以传递在每次递归调用时增加的参数depth

以下是如何做到这一点:

# You'll have a class like this:
class Person:
    def __init__(self, name):
        self.name = name
        self.children = []
    def addChild(self, child):
        self.children.append(child)
        return self # to allow chaining

# The function of interest:
def family_tree(person, level = 2):
    def recurse(person, depth):
        if depth > level: return
        print (" " * (4 * depth) + person.name)
        for child in person.children:
            recurse(child, depth+1)
    recurse(person, 0)

# Sample data
george = Person("George").addChild(
    Person("Michael").addChild(
        Person("Juliet").addChild(
            Person("don't show me")
        )
    )
).addChild(
   Person("Peter").addChild(
        Person("Mary")
   )
)

# Call the function
family_tree(george)