2016-10-15 42 views
0

バイナリツリーを作成しようとしています。私は下部にテストコードを持っているかテストしていますが、私はエラーメッセージが表示され、「ELIFのVAR < here._variable: はTypeError:unorderable種類:STRを()< INT()」いずれかの洞察力は素晴らしいことだバイナリツリーの問題:順序付け不可能な型:str()<int()

class vartree: 

    class Node: 

     __slots__= "_left", "_value", "_variable", "_right" 
     def __init__ (self, l, var,val,r): 
      self._left = l 
      self._variable = var 
      self._value = val 
      self._right = r 

    def __init__(self): 
     self._root = None 

    def _search (self, here, var): 
     if here is None: 
      return self.Node(None, var, '0', None) 

     elif var < here._variable: 
      return self._search(here._left, var) 

     elif var > here._variable: 
      return self._search(here._right, var) 

     else: 
      return here._value 

    def _insert(self, here, var, val): 
     if here is None: 
      return self.Node(None, val, var, None) 

     elif var < here._variable: 
      return self.Node(self._insert(here._left, var, val), here._value, here._variable, here._right) 

     elif var > here._variable: 
      return self.Node(here._left , here._value, here._variable, self._insert(here._right, var, val)) 

     else: 
      return var 

    def assign(self, var, val): 
     self._root = self._insert(self._root, var, val) 
     #self._insert(self._root, var, val) 

    def lookup(self, var): 
     return self._search(self._root, var) 


if __name__ == "__main__": 
    T = vartree() 
    T.assign("x",9) 
    T.lookup("x") 
+0

は私たち全体のトレースバックを表示してください。エラーメッセージ。 –

+0

ここに文字列 'Node(None、var、 '0'、None)'を返したようです。たぶん –

+0

@RoryDaultonトレースバック(最新の呼び出しの最後):内のルックアップ リターンself._search(self._root、VAR) ライン19、中 T.lookup( "X")で ライン52、 ライン46、 _search elif var ernie

答えて

1

問題は、1つは整数で、もう1つはエラーが発生する行の文字列です。あなたのコードを分析した後、私はなぜこれが起こっているのか知っていると思います。このようにしてください:_insert()関数で

、 変更この行:これまで

return self.Node(None, val, var, None) 

return self.Node(None, var, val, None) 

・ホープ、この助け:)

+0

AHHHちょっとばかげたエラーですが、ありがとうございます!私は気づいたことがないだろう – ernie

+0

喜んで:) – Raza

関連する問題