2017-02-19 17 views
1

私はツリートラバーサルの値を(順番に)さらなる処理のためのリストに格納する効率的で簡単な方法を見つけようとしていますが、それを実行する適切な方法が得られていません。ツリー内のインオーダートラバーサル中に値をリストに格納する方法は?

私が望む理由は、ツリー内のモードを見つけることです。私はglobal変数を試しましたが、私はそれのファンではなく、コードが悪く見えるようにしています。 私はyield関数を試しましたが、それはうまくいっていないようです。あなたがPyhotn 3.3+を使用している場合

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

おかげで、 Prerit

答えて

0

は、あなたが使用することができます(私はいくつかの希望は、このために残っている)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

関連する問題