📅  最后修改于: 2023-12-03 14:50:21.973000             🧑  作者: Mango
二叉搜索树(Binary Search Tree)是一种非常常见的数据结构,它是一种有序树,所有节点的左子节点都小于该节点,右子节点都大于该节点。二叉搜索树可以提供快速的查找、插入和删除操作。
以下是一个简单的二叉搜索树的实现。我们定义一个 Node
类来表示树的每个节点,包括一个值和指向左右子节点的指针。我们还定义了一个 BST
类来表示整个树,包括插入、查找和删除节点的方法。
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
class BST:
def __init__(self):
self.root = None
def insert(self, value):
if not self.root:
self.root = Node(value)
else:
self._insert(value, self.root)
def _insert(self, value, current_node):
if value < current_node.value:
if not current_node.left:
current_node.left = Node(value)
else:
self._insert(value, current_node.left)
else:
if not current_node.right:
current_node.right = Node(value)
else:
self._insert(value, current_node.right)
def find(self, value):
if not self.root:
return False
else:
return self._find(value, self.root)
def _find(self, value, current_node):
if value == current_node.value:
return True
elif value < current_node.value and current_node.left:
return self._find(value, current_node.left)
elif value > current_node.value and current_node.right:
return self._find(value, current_node.right)
else:
return False
def delete(self, value):
if not self.root:
return False
else:
self._delete(value, self.root)
def _delete(self, value, current_node):
if value == current_node.value:
if not current_node.left and not current_node.right:
current_node = None
elif not current_node.left:
current_node = current_node.right
elif not current_node.right:
current_node = current_node.left
else:
min_right = self._find_min(current_node.right)
current_node.value = min_right.value
self._delete(min_right.value, current_node.right)
elif value < current_node.value and current_node.left:
self._delete(value, current_node.left)
elif value > current_node.value and current_node.right:
self._delete(value, current_node.right)
def _find_min(self, current_node):
while current_node.left:
current_node = current_node.left
return current_node
要使用我们的二叉搜索树,我们首先需要创建一个 BST
对象:
tree = BST()
接下来,我们可以使用 insert
方法添加新值:
tree.insert(5)
tree.insert(3)
tree.insert(7)
我们还可以使用 find
方法查找特定的值:
print(tree.find(3)) # 输出 True
print(tree.find(8)) # 输出 False
最后,我们可以使用 delete
方法删除特定的值:
tree.delete(3)
二叉搜索树是一种非常有用的数据结构,可以提供快速的查找、插入和删除操作。希望上面的介绍对您有所帮助,也希望您能在实际的项目中应用到这个概念。