파이썬에서 이진 검색 트리를 구현하려고하는데 삭제할 솔루션을 찾을 수 없습니다. 항목이 리프에 있으면 간단하지만 삭제하려는 항목에 다른 하위 항목이있는 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)
또한 내가 지금까지 작성한 내용에 대한 제안 사항이 있으면 정말 감사하겠습니다. 미리 감사드립니다. 이 숙제가 아닌 경우
[Wikipedia article] (http://en.wikipedia.org/wiki/Binary_search_tree#Deletion)에는 여기에서 사용할 방법에 대한 설명이 있습니다. –