2017-11-23 5 views
0

트리를 탐색하려고하는데 오류가 발생합니다. 제발 도와주세요. 동일한 클래스의 정의를 호출하고 클래스 객체를 보내는 매개 변수로 호출하려고합니다. 그러나 호출 정의는 매개 변수 유형을 식별 할 수 없습니다.Python : AttributeError : 'NoneType'객체에 'val'속성이 없습니다. 행 : 14

Definition for a binary tree node. 
class TreeNode(object): 
    def __init__(self, x): 
     self.val = x 
     self.left = None 
     self.right = None 

class Solution(object): 
    def same(self, s, t): 
     if(s is None and t is None): 
      return True 
     if(s is None or t is None): 
      return False 
     return s.val==t.val and self.same(s.left,t.left) and self.same(s.right,t.right) 

    def traverse(self, s, t): 
     return (s!="" and (self.same(s,t) or self.traverse(s.left,t) or self.traverse(s.right,t))) 

    def isSubtree(self, s, t): 
     # print s.val 
     return self.traverse(s,t) 
+1

'' ''을 (를) 테스트 중이지만 '없음'을 테스트하는 것은 아닙니다. –

+1

'if (s == ""또는 t == "") :''s 또는 t :'와 같이 더 Pythonic이 될 수 있습니다.''else else ~~ –

+0

예. 하지만 그건 내 문제가 아니야. – Vivek

답변

0

t 및 s가 TreeNode 객체라고 가정 할 때, 어디에서 선언합니까? 선언되지 않은 변수를 Solution으로 전달할 가능성이 있습니까?

+0

예. 솔루션 **의 ** isSubtree **를 호출합니다. ** isSubtree **에서 s.val을 인쇄 할 수 있지만 다른 정의에서는 그렇지 않습니다. – Vivek

1

체크인에 반하여 '' 체크와 같은 문제가있는 것 같습니다. 이 때문에 None 값이 동일하게 전달됩니다.

+0

어떻게? 나는 아직도 혼란 스럽다. 문제는 해결된다. 나는 단지 None이 어떻게 달라지는지를 알고 싶다. – Vivek

+0

's! = '''대신's is None None'을 사용하면된다. 그것들은 다른 것들을 의미합니다. –

+0

그래서 ** s! = ''** ** 쓸 것인가 ** s ** 자동으로 캐스팅 할 것인가? – Vivek