В будущем попытайтесь выполнить некоторую отладку и предоставить пример выходных данных и ожидаемый результат.
Рассмотрим ниже
def _remove(self, key, node):
if node == None:
return None
if key == node.key:
if node.left and not node.right: # only left
return node.left
elif node.right and not node.left: # only right
return node.right
elif not node.right and not node.left: # neither
return None
else : # both
inorder_successor = node.right
while inorder_successor.left:
inorder_successor = inorder_successor.left
# remember to replace inorder_successor with it's right child
...
...
return inorder_successor
# iterates recursively in the bst
elif key <= node.key:
node.left = self._remove(key, node.left)
else:
node.right = self._remove(key, node.right)
return node
Несколько замечаний о том, что изменилось
None
, используя is != None
, что очень непитонно. Просто проверьте вместо is
и is not
Средства k, постоянные в венгерской записи..., видят Нижний регистр "k" в Какао.
Это - соглашение о присвоении имен с первых лет программирования макинтоша. Это указывает на константу.