По какой-то причине я не могу заставить метод «найти» работать. Я думаю, что это связано с проблемой определения области ... root.val, похоже, не обновляется глобально. Я получаю сообщение об ошибке, говорящее AtributeError: «INT» объект не имеет атрибута «Вэл» Вот мой код на данный момент:python двоичное дерево поиска
class BinaryNode:
def __init__(self, v):
self.val = v
self.leftChild = None
self.rightChild = None
def get(self):
return self.val
def set(self, v):
self.val = v
def getChildren(self):
children = []
if self.leftChild != None:
children.append(self.leftChild)
if self.rightChild != None:
children.append(self.rightChild)
return children
class Tree:
def __init__(self):
self.root = None
def setRoot(self, node):
self.root = node
def size(self):
if self.root == None:
return 0
def subtreeSize(node):
return 1 + sum(subtreeSize(c) for c in node.getChildren())
return subtreeSize(self.root)
class BinarySearchTree(Tree):
def insert(self, val):
self.insertNode(self.root, val)
def insertNode(self, node, val):
if node is None:
self.setRoot(BinaryNode(val))
elif val <= node.val:
node.leftChild = insertNode(BinaryNode(val), val)
elif val > node.val:
node.rightChild = insertNode(BinaryNode(val), val)
else:
node.val = val
def find(self, val):
self.findNode(self.root, val)
def findNode(self, node, val):
if node is None:
return False
elif val == node.val:
return True
elif val < node.val:
self.findNode(val, node.leftChild)
else:
self.findNode(val, node.rightChild)
if __name__ == "__main__":
btree = BinarySearchTree()
vals = [5]
for v in vals:
btree.insert(v)
tests = [8, 5]
for t in tests:
print "find(%i) = %s" % (t, ("True" if btree.find(t) else "False"))
Зачем вам удалять этот вопрос и отказывать другим в помощи, которую вы получили? – Gareth
Пожалуйста, делайте * не * уберите вопрос. Вы разместили это под лицензией CC Wiki (см. Нижнюю правую часть страницы), и ваш вопрос призван помочь * другим * в будущем. –
Если вы чувствуете, что вы разместили это по ошибке (не хотите, чтобы ваш профессор узнал?), Вам необходимо [запросить отключение от должности] (http://meta.stackexchange.com/questions/96732/how -do-я-удалить-мой-имя-с-а-пост-в-соответствии-с-ccwiki). Не просто уничтожайте его и отрицайте тех, кто помог вам репутацию и признание. –