2017-02-19 32 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