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

77 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第28天,点击查看活动详情

阳了,艰难更文中~~~,如写得不够详细,敬请谅解

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

一、题目描述:

给定二叉搜索树(BST)的根节点 root 和一个整数值 val。

你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。

示例 1:

输入:root = [4,2,7,1,3], val = 2

输出:[2,1,3]

示例 2:

输入:root = [4,2,7,1,3], val = 5 输出:[]

提示:

数中节点数在 [1, 5000] 范围内

1 <= Node.val <= 10^7

root 是二叉搜索树

1 <= val <= 10^7

来源:力扣(LeetCode)

链接:leetcode.cn/problems/se…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

  1. 这道题考察了什么思想?你的思路是什么?

    1. 理解题意:

      • 题目给出一根二叉搜索树(Binary Search Tree,BST),和一个值
      • BST 的特征:左子树的值 < 根结点的值 < 右子树的值;根节点的每一个左右子树都是一颗 BST
      • 在给定的 BST 中找出是这个值的根节点
    2. 整体思路:

      • 根据 BST 的特征,可以用类似于二分查找法来解题,每一次递归都只需要去左右子树中的一个中寻找
      • 当目标值小于根结点的值时需要去左子树中寻找
      • 当目标值大于根节点的值时需要去右子树中寻找
  2. 做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

    是一次通过的

  3. 有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

    func searchBST(root *TreeNode, val int) *TreeNode {
        for root != nil {
            if val == root.Val {
                return root
            }
            if val < root.Val {
                root = root.Left
            } else {
                root = root.Right
            }
        }
        return nil
    }
    ​
    作者:LeetCode-Solution
    链接:https://leetcode.cn/problems/search-in-a-binary-search-tree/solution/er-cha-sou-suo-shu-zhong-de-sou-suo-by-l-d8zi/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

image.png

三、AC 代码:

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if (root == null) return null;
        if (root.val == val){
            // 找到目标值
            return root;
        } else if (val < root.val) {
            // 目标值在左子树中
            return searchBST(root.left, val);
        } else {
            // 目标值在右子树中
            return searchBST(root.right, val);
        } 
    }
}

四、总结:

这道题目还是比较简单的,是常见的数据结构题目。在二叉搜索树中搜索值。

模板来源:

作者:掘金酱

链接:juejin.cn/post/706970…

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。