📅  最后修改于: 2023-12-03 14:54:56.592000             🧑  作者: Mango
二叉搜索树(Binary Search Tree,简称BST)是一种常用的数据结构,它是一棵二叉树,其每个节点的值大于其左子树的所有节点的值,小于其右子树的所有节点的值。由于这个特点,BST可以高效地支持查找、插入和删除操作。
插入操作用于向BST中添加一个新的节点。首先需要找到插入位置,然后在该位置创建一个新的节点,并将它连接到BST中。
class TreeNode:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def insert(root, value):
if root is None:
return TreeNode(value)
if value < root.value:
root.left = insert(root.left, value)
elif value > root.value:
root.right = insert(root.right, value)
return root
查找操作用于在BST中查找一个特定的值。从根节点开始,如果当前节点的值等于要查找的值,则返回该节点;如果要查找的值小于当前节点的值,则继续在左子树中查找;如果要查找的值大于当前节点的值,则继续在右子树中查找。
def search(root, value):
if root is None or root.value == value:
return root
if value < root.value:
return search(root.left, value)
return search(root.right, value)
删除操作用于从BST中删除一个节点。首先需要找到要删除的节点,然后根据其子节点的情况进行操作。
def delete(root, value):
if root is None:
return root
if value < root.value:
root.left = delete(root.left, value)
elif value > root.value:
root.right = delete(root.right, value)
else:
if root.left is None:
return root.right
elif root.right is None:
return root.left
root.value = find_min(root.right)
root.right = delete(root.right, root.value)
return root
def find_min(node):
while node.left:
node = node.left
return node.value
二叉搜索树是一种常见且有用的数据结构,它具有高效的查找、插入和删除操作,适用于实现有序集合和关联数组等场景。然而,BST的效率取决于其平衡性,当BST退化为链表时,性能会明显下降。因此,在实际应用中,可以使用平衡二叉搜索树(如AVL树、红黑树)来解决这个问题。