如何解决Python中的二进制搜索树中的删除问题
我无法删除我的二进制搜索树的根。其余所有节点都可以删除,但是Root遇到了一些问题,非常感谢您帮助我进行一些小的更改。我在某些网站上看到过,它说要以 None 开头的root,然后再开始加数字,但即使这样也不起作用。 它说您不能添加一个nonetype。 这是我的代码,
class BST:
def __init__(self,data):
self.right = None
self.left = None
self.data = data
def insert(self,root_insert,key):
if root_insert is None:
return BST(key)
else:
if root_insert.data == key:
return root_insert
elif root_insert.data < key:
root_insert.right = self.insert(root_insert.right,key)
else:
root_insert.left = self.insert(root_insert.left,key)
return root_insert
def find_val(self,data):
if data < self.data:
if self.left is None:
return str(data) + " Not Found"
return self.left.find_val(data)
elif data > self.data:
if self.right is None:
return str(data) + " Not Found"
return self.right.find_val(data)
else:
return str(self.data) + " is Found"
def inorder(self,root_inorder):
if root_inorder:
self.inorder(root_inorder.left)
print(root_inorder.data,end=" ")
self.inorder(root_inorder.right)
def postorder(self,root_postorder):
if root_postorder:
self.postorder(root_postorder.left)
self.postorder(root_postorder.right)
print(root_postorder.data,end=" ")
def preOrder(self,root_preOrder):
if root_preOrder:
print(root_preOrder.data,end=" ")
self.preOrder(root_preOrder.left)
self.preOrder(root_preOrder.right)
def deleteNode(self,root_delete,data):
if root_delete is None:
return root_delete
if data < root_delete.data:
root_delete.left = self.deleteNode(root_delete.left,data)
elif data > root_delete.data:
root_delete.right = self.deleteNode(root_delete.right,data)
else:
if root_delete.left is None:
temp = root_delete.right
return temp
elif root_delete.right is None:
temp = root_delete.left
return temp
root_delete.data = self.min_value_node(root_delete.right)
root_delete.right = self.deleteNode(root_delete.right,root_delete.data)
return root_delete
def min_value_node(self,node):
current = node
while current.left is not None:
current = current.left
return current
root = BST(12)
root = root.insert(root,6)
root = root.insert(root,14)
root = root.insert(root,3)
root = root.insert(root,70)
root = root.insert(root,15)
root = root.insert(root,35)
root = root.insert(root,30)
root = root.insert(root,31)
print("********IN ORDER********")
root.inorder(root)
print("\n********PRE ORDER********")
root.preOrder(root)
print("\n********POST ORDER********")
root.postorder(root)
print("")
print(root.find_val(7))
print(root.find_val(14))
root.deleteNode(root,6)
print("********IN ORDER********")
root.inorder(root)
root.deleteNode(root,14)
print("\n********IN ORDER********")
root.inorder(root)
root.deleteNode(root,3)
print("\n********IN ORDER********")
root.inorder(root)
root.deleteNode(root,70)
print("\n********IN ORDER********")
root.inorder(root)
root.deleteNode(root,15)
print("\n********IN ORDER********")
root.inorder(root)
root.deleteNode(root,30)
print("\n********IN ORDER********")
root.inorder(root)
root.deleteNode(root,31)
print("\n********IN ORDER********")
root.inorder(root)
root.deleteNode(root,35)
print("\n********IN ORDER********")
root.inorder(root)
root.deleteNode(root,12)
print("\n********IN ORDER********")
root.inorder(root)
root.deleteNode(root,12)
print("\n********IN ORDER********")
root.inorder(root)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。