如何在树中按顺序遍历时在列表中存储值?

时间:2017-02-19 15:47:40

标签: python python-3.x tree-traversal

我一直在尝试找到一种有效且简单的方法来将树遍历(按顺序)的值存储在列表中以供进一步处理,但我没有得到正确的方法来执行它。

我想要它的原因是在树中找到模式。我尝试了global变量,但我不是它的粉丝,使代码看起来很糟糕。 我尝试了yield函数,但这似乎没有任何好处。 (我对此有一些希望)

def inorder(self,root):
        if not root:
            return 
        self.inorder(root.left)
        self.store(root.val)
        self.inorder(root.right)

谢谢, Prerit

1 个答案:

答案 0 :(得分:1)

如果您使用的是Pyhotn 3.3+,则可以使用yieldyield from expressions

class Node:

    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

    def inorder(self, root):
        if not root:
            return
        yield from self.inorder(root.left)
        yield root.val
        yield from self.inorder(root.right)

        # # For Python 3.2-
        # for val in self.inorder(root.left):
        #     yield val
        # yield root.val
        # for val in self.inorder(root.right):
        #     yield val

用法:

# Traverse
n = Node('top', Node('left'), Node('right'))
for val in n.inorder(n):
    print(val)
# -> prints `left`, `top`, `right`

# get as a list
list(n.inorder(n)) # -> ['left', 'top', 'right']