2017-09-11 29 views
-1

私は関数にsumOfLeftLeaves再帰的に定義したい:Pythonでクラス内の関数を正しく定義する方法は?

class Node(object): 
    def __init__(self,x): 
    self.val = x 
    self.left = None 
    self.right = None 

class Solution(object): 
    def sumOfLeftLeaves(self,root): 
    if root.val == None: 
     return 0 
    elif (root.left.left == None and root.left.right == None): 
     return root.left.val + sumOfLeftLeaves(root.right) 
    else: 
     return sumOfLeftLeaves(root.left)+sumOfLeftLeaves(root.right) 

をしかし、それは誤り「NameError:グローバル名 『sumOfLeftLeaves』が定義されていません」を与えるが、私は再帰的に、間違って何それが定義されていると思いますか?

+0

余談なぜ 'Solution'クラスですか?これはオンラインでの提出形式には必要ですか?単一のメソッドと内部状態を持たないクラスは、おそらくクラスではなく、単にモジュールレベルの関数でなければなりません。 –

答えて

2

sumOfLeftLeavesは、のまだメソッドであり、グローバルに定義された関数ではありません。あなたは、あなたが他のメソッドにアクセスしたいだけのよう、self上の結合方法として、それをアクセスすることができます。

self.sumOfLeftLeaves(...) 

同様Noneオブジェクトをテストするときには、本当にis Noneを使用する必要があります。

class Solution(object): 
    def sumOfLeftLeaves(self, root): 
     if root.val is None: 
      return 0 
     elif (root.left.left is None and root.left.right is None): 
      return root.left.val + self.sumOfLeftLeaves(root.right) 
     else: 
      return (self.sumOfLeftLeaves(root.left) + 
        self.sumOfLeftLeaves(root.right)) 
関連する問題