[英]Binary Search Tree Python, Implementing Delete
我试图在python中实现二进制搜索树,但我找不到删除的解决方案。 如果项目在一个叶子中,这很简单,但如果我要删除的项目有2个孩子也有其他孩子等等怎么办? 如何找到它的继任者,以便我可以取而代之? 有没有简单的递归解决方案?
class Node:
def __init__(self, data=None, left=None, right=None):
self.data = data
self.left = left
self.right = right
class BinarySearchTree:
def __init__(self, root=None):
self.root = Node(root)
def add(self, data, node):
if node == None:
node = Node(data)
return True
if data < node.data:
if node.left == None:
node.left = Node(data)
return True
else:
self.add(data, node.left)
elif data > node.data:
if node.right == None:
node.right = Node(data)
return True
else:
self.add(data, node.right)
def preorder(self, node):
if node != None:
print(node.data)
self.preorder(node.left)
self.preorder(node.right)
def inorder(self, node):
if node != None:
self.inorder(node.left)
print(node.data)
self.inorder(node.right)
def postorder(self, node):
if node != None:
self.postorder(node.left)
self.postorder(node.right)
print(node.data)
def retreive(self,item):
node = self.root
while node != None:
if node.data == item:
break
elif item < node.data:
if node.left != None:
if node.left.data == item:
node.left = None
return True
node = node.left
else:
if node.right != None:
if node.right.data == item:
node.right= None
return True
node = node.right
if node == None:
return False
tree = BinarySearchTree()
root=Node(3)
tree.add(55,root)
tree.add(5,root)
tree.add(13,root)
tree.add(2,root)
tree.add(3,root)
tree.preorder(root)
tree.postorder(root)
tree.inorder(root)
如果你对我到目前为止所写的内容有任何建议,我真的很感激。 提前致谢。
如果这不是作业,您可以使用以下方法之一:
两者都实现删除。 两者都很好地处理排序或未排序的输入。
红黑树模块有一个RedBlackTree继承的BinaryTree类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.