[英]implementing Search Tree in Python
我知道有关此主题的问题已经很多,但是没有一个问题可以解决我的问题。
我正在尝试构建具有两个选项的搜索树:
建树
从用户那里获取一棵树并在其中搜索(例如,列表,字典等)
我的问题是第二个选项,因为它似乎是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()
当您检查项目时,修改该行以使用您的内置添加项。
if items:
for i in self.items:
# Instead of self.root.add(i)
self.add(i)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.