私はすでにこのトピックに関する複数の質問があることを知っていますが、私の問題の解決策はありません。Pythonで検索ツリーを実装しています
私は2つのオプションがあり探索木を構築しようとしている:
は木に
を構築し、ユーザーからツリーを取得し、それを検索(例えばリストとして、辞書...)
私の問題は、AttributeError
のように見えます。
私はそれが正常に動作していない特定の木に自分のコードを実行しますが、私は、リストでそれをしようとすると、エラーメッセージが表示されます。
self.root.add(i)
AttributeError: 'NoneType' object has no attribute 'add'
マイコード:あなたがチェック
import unittest
class Testfunction(unittest.TestCase):
def test(self):
init = SearchTree(['x', 'b', 'eee'])
init.add('left')
init.add('right')
init.tolist()
self.assertEqual(init.__contains__('left'),True)
self.assertEqual(init.add('xx'), None)
class Node:
def __init__(self, val):
self.value = val
self.left = None
self.right = None
def insert(self, item):
if self.value == item:
return False
elif self.value > item:
if self.left:
return self.left.insert(item)
else:
self.right = Node(item)
return True
def find(self, item):
if self.value == item:
return True
elif self.value > item:
if self.left:
return self.left.find(item)
else:
return False
else:
if self.right:
return self.right.find(item)
else:
return False
def tolist(self):
if self:
if self.left:
self.left.tolist()
if self.right:
self.right.tolist()
class SearchTree:
def __init__(self, items=None):
# if items . then should be inserted
self.items = items
self.root = None
if items:
for i in self.items:
self.root.add(i)
def __contains__(self, item):
if self.root:
return self.root.find(item)
else:
return False
def add(self, item):
if self.root:
return self.root.insert(item)
else:
self.root = Node(item)
def tolist(self):
self.root.tolist()
test = Testfunction()
test.test()
なぜ驚くべきことでしょうか?文字通り 'self.root = None'を設定するだけです.3行前にエラーがあります。 – jonrsharpe
@jonrsharpeだから、どうすればいいですか? – james