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/学习它。因为,他们在代码中使用递归。我无法理解它。
所以,我试着制作这段代码。 在这里,我在 init 方法中初始化root,然后在你面前放置两个方法。
def __init__(self):
self.root=None
FLAG变量:我用它来找到父节点和数据节点之间的关系(我们要删除)。
众所周知,有三种情况
拜托,任何人都可以帮我解决这个问题吗?
你介意给我看看,
输出:
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 -
提前谢谢你:)
答案 0 :(得分:1)
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=self.minimum_element(node.rightchild)
temp=replace_node.data
self.delete_a_node(replace_node.data)
node.data=temp
def minimum_element(self,node):
if self.root==None:
print("Empty BST")
else:
while(node.leftchild!=None):
node=node.leftchild
print(node.data)
return (node)
所以,在评论部分的帮助下。我完成了代码。非常感谢,伙计们。
我应该使用del还是不使用del Is the use of del bad?
复杂性非常好。