Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在树中按顺序遍历时,如何在列表中存储值?_Python_Python 3.x_Tree Traversal - Fatal编程技术网

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

Python 在树中按顺序遍历时,如何在列表中存储值?,python,python-3.x,tree-traversal,Python,Python 3.x,Tree Traversal,我一直在试图找到一种高效、简单的方法来将树遍历的值(按顺序)存储在列表中,以便进一步处理,但我没有找到一种正确的方法来执行它 我想要它的原因是在树中找到模式。我尝试了global变量,但我不喜欢它,这会让代码看起来很糟糕。 我尝试了收益率函数,但这似乎没有任何好处。(我对此还有一些希望) 谢谢, Prerit如果您使用的是Pyhoton 3.3+,您可以使用收益率和: 用法: # Traverse n = Node('top', Node('left'), Node('right')) for

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

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

谢谢,
Prerit

如果您使用的是Pyhoton 3.3+,您可以使用
收益率
和:

用法:

# 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']

我以前在LeetcodeOJ上试过这个,它给出了一个语法错误。我想我应该试试第二种方法。
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']