2017-11-23 13 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 ==" "):'はもっと '' Pythonic''のような ''なら '' '' '' '' '' ''他のelse~~ –

+0

ええ。それは私の問題ではありません。 – Vivek

答えて

0

tとsはTreeNodeオブジェクトであると仮定して、どこで宣言しますか?宣言されていない変数をSolutionに渡している可能性はありますか?

+0

はい。ソリューションの** isSubtree **を呼び出しています。 ** isSubtree **でs.valを印刷できますが、他の定義では印刷できません – Vivek

1

Noneチェックイントラバースではなく、''チェックのような問題が発生しています。このため、Noneの値は同じになります。

+0

どうやってですか?私はまだ混乱しています。問題は解決されました。私はただNoneがどのように違いを生むのか知りたいだけです – Vivek

+0

'sは= None 'ではなく、' s!=' ''の代わりに使用してください。それらは異なることを意味します。 –

+0

だから、** s!= '' ** **と書くと自動で** ** **自動的にキャストされますか? – Vivek

関連する問題