2016-09-25 11 views
-2

私の質問をより明確に書き直せます。私はLeetCodeの問題に遭遇しました。バイナリ検索ツリーを検証します。このソリューションは、テストに合格するために失敗したpython再帰クラス変数

class Solution(object): 
    def recursion(self, input, var_x, ans): 
     #update var_x 
     #update ans 
     self.recursion(input, var_x, ans) 

    def mySolution(self, input): 
     ans = [] 
     var_x = 0 
     self.recursion(input, var_x, ans) 
     return ans 

私の最初のソリューションは次のようになります。しかし、私は簡単な変更を行った後、それを渡します

class Solution(object): 
    def recursion(self, input, ans): 
     #update self.var_x 
     #update ans 
     self.recursion(input, ans) 

    def mySolution(self, input): 
     ans = [] 
     self.var_x = 0 
     self.recursion(input, ans) 
     return ans 

self.var_x対var_x宣言の違いは何ですか?私はこれらの2つがこの問題で同じ効果があると思いますが、もう一方はテストに合格しますか?

+0

インデントを確認してください。 –

+1

'prev = node'(' self.prev'はありません)をやっているので、もっとうまくいっています。 –

+0

これはある種のコーディング競争サイトなので、私はあまり言いたくはありませんが、データを提示する方法を誤解しているかもしれません。これは、パックドバイナリツリーの配列表現を取得しているようです。ノードNの子は2Nと2N + 1の番号が付けられています。対照的に、あなたはノードオブジェクトを持つ実際のツリーを構築しているように見えますが、それは残念です。返信をありがとう。 –

答えて

0

意味の違いは単純です。var_xは単なる呼び出しインスタンスごとに1つのローカル変数です。 self.var_xは、クラスインスタンスごとに1つのオブジェクトの属性です。

1つのコールインスタンス内でのみ値が必要な場合は、var_xを使用し、一時的な値を格納してオブジェクトを煩わせることはありません。長期オブジェクトプロパティ(属性)として必要な場合は、self.var_xを使用してください。