顺序遍历树

时间:2017-05-09 16:05:58

标签: python binary-tree binary-search-tree

我正在查看树实现的顺序递归遍历,我想知道如何将结果保存到列表中并从递归函数返回。我在堆栈展开期间如何持久保存此列表时遇到问题。

所以,我的代码为:

class BinaryTreeNode(object):
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

def recursive_inorder(root):
    if not root:
        return

    nodes = list()

    recursive_inorder(root.left)
    nodes.append(root.value)
    print root.value
    recursive_inorder(root.right)
    return nodes

我称之为:

three = BinaryTreeNode(3)
five = BinaryTreeNode(5)
one = BinaryTreeNode(1)
four = BinaryTreeNode(4)
two = BinaryTreeNode(2)
six = BinaryTreeNode(6)

three.left = five
five.left = one
five.right = four

three.right = two
two.left = six

nodes = recursive_inorder(three)

节点以正确的顺序遍历,但我无法弄清楚如何将结果保存到nodes列表中。

1 个答案:

答案 0 :(得分:1)

使用递归调用的返回值来扩展节点列表。此外,当您有None值时返回一个空列表,因此保证您的函数始终返回一个列表:

def recursive_inorder(root):
    if not root:
        return []

    nodes = list()

    nodes.extend(recursive_inorder(root.left))
    nodes.append(root.value)
    nodes.extend(recursive_inorder(root.right))
    return nodes

或者更简洁一点:

def recursive_inorder(root):
    if not root:
        return []

    return recursive_inorder(root.left) + [root.value] + recursive_inorder(root.right)