欢迎访问宙启技术站
智能推送

Python实现简单的二叉搜索树数据结构

发布时间:2023-12-04 17:25:35

二叉搜索树(Binary Search Tree,简称BST)是一种常用的数据结构,它具有以下特点:每个节点都有一个唯一的键值,并且左子树中的所有节点的键值都小于根节点的键值,右子树中的所有节点的键值都大于根节点的键值。通过这种有序性,二叉搜索树能够提供快速的查找、插入和删除操作。

在Python中,我们可以使用类来实现二叉搜索树的数据结构。下面是一个简单的实现:

class TreeNode:
    def __init__(self, key):
        self.key = key
        self.left = None
        self.right = None

class BST:
    def __init__(self):
        self.root = None

    def insert(self, key):
        if not self.root:
            self.root = TreeNode(key)
        else:
            self._insert(self.root, key)

    def _insert(self, node, key):
        if key < node.key:
            if node.left:
                self._insert(node.left, key)
            else:
                node.left = TreeNode(key)
        elif key > node.key:
            if node.right:
                self._insert(node.right, key)
            else:
                node.right = TreeNode(key)

    def search(self, key):
        return self._search(self.root, key)

    def _search(self, node, key):
        if not node or node.key == key:
            return node
        if key < node.key:
            return self._search(node.left, key)
        return self._search(node.right, key)

    def delete(self, key):
        self.root = self._delete(self.root, key)

    def _delete(self, node, key):
        if not node:
            return node
        if key < node.key:
            node.left = self._delete(node.left, key)
        elif key > node.key:
            node.right = self._delete(node.right, key)
        else:
            if not node.left:
                return node.right
            elif not node.right:
                return node.left
            else:
                min_node = self._find_min(node.right)
                node.key = min_node.key
                node.right = self._delete(node.right, min_node.key)
        return node

    def _find_min(self, node):
        curr_node = node
        while curr_node.left:
            curr_node = curr_node.left
        return curr_node

    def inorder_traversal(self):
        result = []
        self._inorder_traversal(self.root, result)
        return result

    def _inorder_traversal(self, node, result):
        if node:
            self._inorder_traversal(node.left, result)
            result.append(node.key)
            self._inorder_traversal(node.right, result)

使用例子:

# 创建一个BST对象
bst = BST()

# 插入节点
bst.insert(5)
bst.insert(3)
bst.insert(7)
bst.insert(2)
bst.insert(4)
bst.insert(6)
bst.insert(8)

# 查找节点
print(bst.search(3))

# 删除节点
bst.delete(5)

# 中序遍历
print(bst.inorder_traversal())

以上只是一个简单的二叉搜索树的实现和使用例子,实际应用中还可以进一步扩展,比如实现其他常用的二叉搜索树操作如前序遍历、后序遍历、层序遍历等,以及添加其他功能如计算树的高度、验证树的平衡性等。