返回

二叉搜索树的插入与搜索

前端

二叉搜索树简介

二叉搜索树(BST)是一种基于二叉树的数据结构,它利用数据项的排序特性来存储和组织数据。BST 的每个节点最多有两个子节点(左子节点和右子节点),并且节点中的数据项比其左子节点中的数据项大,而比其右子节点中的数据项小。

插入

在二叉搜索树中插入一个新数据项时,我们从根节点开始,并根据插入的数据项与当前节点的数据项进行比较来确定要移动的方向。如果新数据项小于当前节点的数据项,则移动到左子节点;否则,移动到右子节点。这个过程一直持续到我们找到一个空节点,然后将新数据项插入到该节点。

def insert(self, data):
    if self.root is None:
        self.root = Node(data)
    else:
        self._insert(data, self.root)

def _insert(self, data, node):
    if data < node.data:
        if node.left is None:
            node.left = Node(data)
        else:
            self._insert(data, node.left)
    elif data > node.data:
        if node.right is None:
            node.right = Node(data)
        else:
            self._insert(data, node.right)
    else:
        print("Duplicate data found, not inserted")

搜索

在二叉搜索树中搜索一个数据项时,我们也从根节点开始,并根据要搜索的数据项与当前节点的数据项进行比较来确定要移动的方向。如果要搜索的数据项小于当前节点的数据项,则移动到左子节点;否则,移动到右子节点。这个过程一直持续到我们找到包含要搜索的数据项的节点或到达一个空节点。如果到达空节点,则表示数据项不存在于树中。

def search(self, data):
    if self.root is None:
        return False
    else:
        return self._search(data, self.root)

def _search(self, data, node):
    if data == node.data:
        return True
    elif data < node.data:
        if node.left is None:
            return False
        else:
            return self._search(data, node.left)
    elif data > node.data:
        if node.right is None:
            return False
        else:
            return self._search(data, node.right)