def delete_a_node(self,data):
if self.root==None:
print("Empty BST")
else:
parent=None
node=self.root
replace_node=None
while(node!=None and node.data!=data):
parent=node
if data>=node.data:
node=node.rightchild
flag=1
else:
node=node.leftchild
flag=0
if node is None:
print("node not in BST.")
else:
if (node.leftchild==None) and (node.rightchild==None):
if (flag):
parent.rightchild=None
else:
parent.leftchild=None
del node
elif (node.leftchild==None) or (node.rightchild==None):
if node.leftchild==None:
if(flag):
parent.rightchild=node.rightchild
else:
parent.leftchild=node.rightchild
else :
if(flag):
parent.rightchild==node.leftchild
else:
parent.leftchild=node.leftchild
del node
else:
replace_node,parent=self.minimum_element(node.rightchild)
node=replace_node
if parent==None:
node.rightchild=None
else:
parent.leftchild=None
del replace_node
def minimum_element(self,node):
if self.root==None:
print("Empty BST")
else:
parent=None
while(node.leftchild!=None):
parent=node
node=node.leftchild
return (node,parent)
Здравствуйте, ребята, я пытался удалить узел из двоичного дерева поиска.Я пытался узнать это у https://www.geeksforgeeks.org/binary-search-tree-set-2-delete/., поскольку они используют рекурсию в своем коде.Я не смог понять это хорошо.
Итак, я попытался создать этот код.Здесь я инициализирую root в методе init , а остальные два метода перед вами.
def __init__(self):
self.root=None
Переменная FLAG: я использовал ее, чтобы просто найти связь между родительским узлом и узлом данных(мы хотим удалить).
Как мы знаем, есть три случая
- Когда у узла, который мы хотим удалить, нет дочернего элемента (он работает нормально)
- Когда у узла, который мы хотим удалить, есть один дочерний элемент (он работает нормально)
- Когда у узла, который мы хотим удалить, есть оба дочерних элемента ( ЗДЕСЬ ПРОБЛЕМА )
Пожалуйста, кто-нибудь может мне помочь с этим кодом?
Не могли бы вы показать мне,
- правильный метод удаления узла из BST
- долженЯ использую del node в Python или нет, потому что я только что прочитал, что нет необходимости освобождать пространство в Python.
- Не слишком ли моя сложность по сравнению с https://www.geeksforgeeks.org/binary-search-tree-set-2-delete/ code?
Вывод:
bst.inorder () 25--15--10--4--12--22--18--24--50--35--31--44--70--66--55--90--105--120 -
bst.delete_a_node (15)
bst.inorder () 25--15--10--4--12--22--18--24--50--35--31--44--70--66--55--90--105--120 -
Заранее спасибо:)