使用递归打印树的叶子列表

时间:2012-03-13 21:23:45

标签: python recursion binary-tree

我需要编写一个函数,我需要返回树的叶子列表。

所以对于这棵树:

        1
    2       3
 4       5     6

这应该打印[4,5,6]

这是我到目前为止所提出的。我似乎无法找到如何回到该功能。它只打印[4]

def fringe(root):

    if root.left:
        return fringe(root.left)
    elif root.right:
        return fringe(root.right)
    else:
        return [root.key]

任何输入?

2 个答案:

答案 0 :(得分:4)

使用yield创建生成器:

def fringe(root):

    if root.left or root.right:
        if root.left:
            for key in fringe(root.left):
                yield key
        if root.right:
            for key in fringe(root.right):
                yield key
    else:
        yield root.key

print list(fringe(mytree))

在较新版本的python中,而不是

for key in fringe(root.left):
    yield key

您可以使用:

yield from fringe(root.left)

答案 1 :(得分:1)

这不起作用,因为如果你已经离开了叶子那么你根本看不到正确的。试试这个

def fringe(root):
    result = []
    if root.left:
        result.extend(fringe(root.left))
    if root.right:
        result.extend(fringe(root.right))
    if not result:
        result = [root.key]
    return result