📜  制作二叉搜索树(1)

📅  最后修改于: 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)
总结

二叉搜索树是一种非常有用的数据结构,可以提供快速的查找、插入和删除操作。希望上面的介绍对您有所帮助,也希望您能在实际的项目中应用到这个概念。