Какое сравнение указателей использовать, чтобы проверить, указывает ли родительский узел на мой узел в двоичном дереве?Python

Программы на Python
Ответить
Anonymous
 Какое сравнение указателей использовать, чтобы проверить, указывает ли родительский узел на мой узел в двоичном дереве?

Сообщение Anonymous »

Изменить: я думал, что self работает так на C++ и Java
Я изучаю Python и пытаюсь программировать функция удаления узла для двоичного дерева.
Я был удивлен: почему сравнения указателей '==', 'id' и 'is' терпят неудачу в этом тесте на то, указывает ли родительский узел на мой узел в двоичном дереве ?
class Node:

...

def delete(self, key):
....
if node_to_delete.parent.left == self: // FAIL

if node_to_delete.parent.left is self: // FAIL

if id(node_to_delete.parent.left) is id(self): // FAIL

В отладчике я вижу, что условие каждый раз не выполняется.
Но когда я использую одно из полей для сравнения, оно работает .
Но это неверно, поскольку предполагается, что ключ уникален.
if node_to_delete.parent.left.key == key: // OK

из
def delete(self, key):
(found, node_to_delete) = self.search(key)
assert(found == True), f"key to be deleted:{key}- does not exist in the tree"
# your code here
if node_to_delete.left == None and node_to_delete.right == None:
if node_to_delete.parent.left.key == key:
node_to_delete.parent.left = None
print('after deleting left child of parent, node_to_delete.parent.left ',node_to_delete.parent.left)
if node_to_delete.parent.right.key == key:
node_to_delete.parent.right = None
...


Подробнее здесь: https://stackoverflow.com/questions/792 ... e-in-the-b
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»