2016-09-25 126 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 

聲明var_x與self.var_x有什麼區別?我認爲這兩個問題在這個問題上具有相同的效果,但是其中一個通過測試而另一個不通過?

+0

請檢查您的縮進。 –

+1

令人驚訝的是,由於您仍然執行'prev = node'(no'self.prev'),所以它效果更好。請提供一個(正確縮進)[mcve] –

+0

由於這是某種編碼競賽網站,我不想多說,但你可能誤解了他們提交數據的方式。看起來你正在獲得一個壓縮二叉樹的數組表示,其中節點N的子節點編號爲2N和2N + 1。相比之下,你似乎在用節點對象構建一棵真正的樹,這可能是......過度殺傷。 –

回答

0

語義上的區別很簡單:var_x只是一個局部變量,每個調用實例一個。 self.var_x是對象的屬性,每個類實例一個。

如果您只需要在一個呼叫實例中使用該值,請使用var_x並且不要打擾存儲瞬態值的對象。如果您需要將其作爲長期對象屬性(屬性),請使用self.var_x