функция возвращает None (python)
переменная x в методе search становится None, хотя на момент return self точно не None
def delete(self, val):
arr = []
x = Tree.search(self, val)
def collectVal(x, arr):
if x is not None:
if x.left is not None:
arr.append(x.left.val)
collectVal(x.left, arr)
if x.right is not None:
arr.append(x.right.val)
collectVal(x.right, arr)
return arr
arr = collectVal(x, arr)
print(arr)
def search(self, val):
if self.val == val:
print("Success!", val, "найдено!")
return self
else:
if val < self.val:
if self.left is not None:
self.left.search(val)
else:
print(val, "not found!")
elif val > self.val:
if self.right is not None:
self.right.search(val)
else:
print(val, "not found!")
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
Насколько я вижу по коду функции вам необходимо найти точное совпадение:
def search(self, val):
if self.val == val:
print("Success!", val, "найдено!")
return self
else:
print(val, "not found!")
return self
в любом случае будет возвращено само значение объекта, но с точки зрения полезности я бы возвращал True/False. Здесь все зависит от требований. И так как над объектом класса не проводятся никакие действия, то и возвращать self смысла нет
def search(self, val):
if self.val == val:
print("Success!", val, "найдено!")
return True
else:
print(val, "not found!")
return False
UPD: по условиям сам класс:
class Tree:
def __init__(self, val):
self.left = None
self.right = None
self.val = val
def search_insert(self, val):
if self.val:
if val < self.val:
if self.left is None:
self.left = Tree(val)
else:
self.left.search_insert(val)
elif val > self.val:
if self.right is None:
self.right = Tree(val)
else:
self.right.search_insert(val)
else:
self.val = val
def collectVal(self, obj):
result = []
if obj:
result = self.collectVal(obj.left)
result.append(obj.val)
result = result + self.collectVal(obj.right)
return result
пример вызова:
>>> from p import Tree as t
>>> r = t(20)
>>> r.search_insert(30)
>>> r.search_insert(24)
>>> r.search_insert(60)
>>> r.search_insert(45)
>>> r.search_insert(1)
>>> r.collectVal(r)
[1, 20, 24, 30, 45, 60]
надеюсь это поможет