700. 二叉搜索树中的搜索 : 二叉树的搜索

简介: 700. 二叉搜索树中的搜索 : 二叉树的搜索

网络异常,图片无法展示
|


题目描述



这是 LeetCode 上的 700. 二叉搜索树中的搜索 ,难度为 简单


Tag : 「树的搜索」、「迭代」、「递归」


给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。


例如,


给定二叉搜索树:
        4
       / \
      2   7
     / \
    1   3
和值: 2
复制代码


你应该返回如下子树:


2     
     / \   
    1   3
复制代码


在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。


递归



根据题意,进行「递归」搜索即可。


代码:


class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if (root == null || root.val == val) return root;
        return root.val < val ? searchBST(root.right, val) : searchBST(root.left, val);
    }
}
复制代码


  • 时间复杂度:O(n)O(n)
  • 空间复杂度:忽略递归带来的额外空间开销,复杂度为 O(n)O(n)


迭代



同理,可以使用「迭代」进行搜索。


代码:


class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        while (root != null && root.val != val) {
            root = root.val < val ? root.right : root.left;
        }
        return root;
    }
}
复制代码


  • 时间复杂度:O(n)O(n)
  • 空间复杂度:O(1)O(1)


最后



这是我们「刷穿 LeetCode」系列文章的第 No.700 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。


在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。


为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:github.com/SharingSour…


在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

相关文章
|
6月前
|
Java C++ Python
leetcode-700:二叉搜索树中的搜索
leetcode-700:二叉搜索树中的搜索
416 0
24_二叉搜索树中的搜索
24_二叉搜索树中的搜索
|
1月前
【LeetCode 39】700.二叉搜索树中的搜索
【LeetCode 39】700.二叉搜索树中的搜索
14 0
|
6月前
深度优化搜索,字典树
深度优化搜索,字典树
58 0
|
存储 编译器 C语言
二叉树搜索
在之前的我们已经学过了普通二叉树,了解了基本的二叉树的结构和基本操作了,不过我们之前的二叉树结构都是使用C语言实现的,我们这次来介绍二叉树中更加复杂的树结构,C语言在实现这些结构已经有些吃力了,更适合我们使用C++来实现。
二叉树——700.二叉搜索树中的搜索
本专栏按照数组—链表—哈希—字符串—栈与队列—二叉树—回溯—贪心—动态规划—单调栈的顺序刷题,采用代码随想录所给的刷题顺序,一个正确的刷题顺序对算法学习是非常重要的,希望对大家有帮助
二叉树——700.二叉搜索树中的搜索
|
算法 索引
基础算法:二分查找 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
257 0