2017-02-19 104 views
1

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

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

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

感谢, Prerit

回答

0

如果您使用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'] 
+0

我在LeetCode OJ之前试过这个,它给出了语法错误。我想我应该尝试第二种方式。 – Prerit

+0

所以leetcode的python版本<3.3。 :) 谢谢! – Prerit