返回

点亮LeetCode:700. 二叉搜索树中的搜索大作战!

前端

在计算机科学的领域里,算法犹如黑夜里的星星,指引着我们前进的方向。而LeetCode,作为算法学习的殿堂,更是吸引着无数勇士前来挑战。今天,我们就将目光聚焦在LeetCode 700. 二叉搜索树中的搜索上,一起踏上这场算法之旅!

二叉搜索树,顾名思义,就是一种特殊的二叉树,它具有以下特性:

  • 左子树中的所有结点的值都小于其父结点的值。
  • 右子树中的所有结点的值都大于其父结点的值。
  • 左、右子树也分别为二叉搜索树。

LeetCode 700. 二叉搜索树中的搜索,就是要我们在一棵二叉搜索树中,找到某个指定的值。我们使用递归的思想来解决这个问题。

def searchBST(root, val):
    if not root:
        return None

    if root.val == val:
        return root

    if val < root.val:
        return searchBST(root.left, val)

    return searchBST(root.right, val)

在这里,我们首先判断二叉搜索树是否为空,如果为空,则直接返回None。

然后,我们比较根节点的值和目标值的大小。如果根节点的值等于目标值,则返回根节点。

如果目标值小于根节点的值,则说明目标值一定在根节点的左子树中,因此我们继续在左子树中搜索。

如果目标值大于根节点的值,则说明目标值一定在根节点的右子树中,因此我们继续在右子树中搜索。

就这样,我们一层一层地递归下去,直到找到目标值或者搜索到二叉搜索树的叶子结点。

需要注意的是,在LeetCode上,这道题目的难度为简单,但是它却考察了我们对二叉搜索树的基本理解和递归思想的掌握。因此,要想解决好这道题目,我们必须夯实基础,才能在算法的道路上越走越远。

说了这么多,我们不妨来做一道练习题,看看你是否真正掌握了这道算法题。

给你一棵二叉搜索树,请你找到其中的最大值和最小值。

def findMaxAndMin(root):
    if not root:
        return None, None

    max_val = root.val
    min_val = root.val

    if root.left:
        max_left, min_left = findMaxAndMin(root.left)
        max_val = max(max_val, max_left)
        min_val = min(min_val, min_left)

    if root.right:
        max_right, min_right = findMaxAndMin(root.right)
        max_val = max(max_val, max_right)
        min_val = min(min_val, min_right)

    return max_val, min_val

好了,今天的LeetCode之旅就到这里了。希望你能够通过这篇文章,对LeetCode 700. 二叉搜索树中的搜索有一个更深入的理解。如果你还有其他疑问,欢迎随时留言讨论!