如何在树中顺序遍历时将值存储在列表中?
How to store value in a list while inorder traversal in a tree?
我一直在努力寻找一种有效且简单的方法来将树遍历的值(按顺序)存储在列表中以供进一步处理,但我没有找到执行它的正确方法。
我想要它的原因是在树中找到模式。我试过 global
变量,但我不喜欢它,这让代码看起来很糟糕。
我尝试了 yield 函数,但似乎没有任何用处。 (我对此还有点希望)
def inorder(self,root):
if not root:
return
self.inorder(root.left)
self.store(root.val)
self.inorder(root.right)
谢谢,
优先
如果您使用的是 Pyhotn 3.3+,您可以使用 yield
和 yield 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']
我一直在努力寻找一种有效且简单的方法来将树遍历的值(按顺序)存储在列表中以供进一步处理,但我没有找到执行它的正确方法。
我想要它的原因是在树中找到模式。我试过 global
变量,但我不喜欢它,这让代码看起来很糟糕。
我尝试了 yield 函数,但似乎没有任何用处。 (我对此还有点希望)
def inorder(self,root):
if not root:
return
self.inorder(root.left)
self.store(root.val)
self.inorder(root.right)
谢谢, 优先
如果您使用的是 Pyhotn 3.3+,您可以使用 yield
和 yield 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']