📜  数据结构 |二叉搜索树 |问题 1(1)

📅  最后修改于: 2023-12-03 14:54:56.012000             🧑  作者: Mango

数据结构 |二叉搜索树 |问题 1


介绍

二叉搜索树(Binary Search Tree),也叫二叉排序树(Binary Sort Tree)或二叉查找树(Binary Search Tree),是一种重要的数据结构。

二叉搜索树是一棵空树或具有以下性质的二叉树:

  1. 若它的左子树不为空,则左子树中所有节点的值均小于它的根节点的值;
  2. 若它的右子树不为空,则右子树中所有节点的值均大于它的根节点的值;
  3. 它的左、右子树都是二叉搜索树。

在二叉搜索树中,对于任意一个节点,它的左子树中的所有节点都比它小,右子树中的所有节点都比它大。因此,它可以高效地支持查找、插入和删除元素等操作。

本文将介绍二叉搜索树的问题1:如何在二叉搜索树中查找一个元素。

实现

在二叉搜索树中查找一个元素,可以使用以下递归方法:

def search_bst(root, val):
    """
    在二叉搜索树中查找一个元素
    """
    if not root or root.val == val:
        # 如果根节点为空或者根节点的值等于val,则返回根节点
        return root
    elif root.val < val:
        # 如果根节点的值小于val,则在右子树中继续查找
        return search_bst(root.right, val)
    else:
        # 如果根节点的值大于val,则在左子树中继续查找
        return search_bst(root.left, val)

其中,root为二叉搜索树的根节点,val为需要查找的元素。

如果根节点为空或者根节点的值等于val,则返回根节点。如果根节点的值小于val,则在右子树中继续查找;如果根节点的值大于val,则在左子树中继续查找。直到找到该元素或者遍历完整棵树都没有找到为止。

同时,也可以使用迭代方法实现:

def search_bst(root, val):
    """
    在二叉搜索树中查找一个元素
    """
    while root and root.val != val:
        # 如果根节点不为空且根节点的值不等于val,则继续查找
        if root.val < val:
            # 如果根节点的值小于val,则在右子树中查找
            root = root.right
        else:
            # 如果根节点的值大于val,则在左子树中查找
            root = root.left
    return root
总结

二叉搜索树中的元素都是有序的,因此可以使用二分查找的思想来查找元素。在二叉搜索树中查找一个元素的时间复杂度为$O(logn)$,其中$n$为二叉搜索树中元素的个数。