2016-09-25 18 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 선언의 차이점은 무엇입니까? 나는이 두가지가이 문제에서 같은 효과가 있다고 생각하지만, 다른 하나는 그렇지 않은 테스트를 통과합니까?

+0

들여 쓰기를 확인하십시오. –

+1

'prev = node' (no self.prev')를 사용하기 때문에 더 잘 작동한다는 것은 놀랍습니다. 제발 (적절하게 들여 쓰여진) [mcve] –

+0

을 제공하십시오. 이것은 일종의 코딩 경쟁 사이트이므로 많은 것을 말하고 싶지는 않지만 데이터를 제시하는 방식을 오해했을 수 있습니다. 그것은 당신이 노드 N의 자식들이 2N과 2N + 1로 번호가 매겨진 압축 이진 트리의 배열 표현을 얻는 것처럼 보입니다. 대조적으로, 당신은 노드 객체를 가진 실제 트리를 만드는 것으로 보이고, 그것은 과잉 일 수 있습니다. 답장을 보내 주셔서 감사합니다. –

답변

0

의미 상의 차이는 간단합니다. var_x은 단지 하나의 호출 인스턴스 당 하나의 로컬 변수입니다. self.var_x은 객체의 속성으로 클래스 인스턴스 당 하나입니다.

하나의 호출 인스턴스에서만 값이 필요하면 var_x을 사용하고 과도 값을 저장하는 데 방해가되지 않도록하십시오. 장기 객체 속성 (속성)으로 필요하면 self.var_x을 사용하십시오.

관련 문제