leetcode刷题-700二叉搜索树的搜索

238 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

leetcode700-二叉搜索树的搜索

前文

本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。

题目信息

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

例如,

给定二叉搜索树:

    4
   / \
  2   7
 / \
1   3

和值: 2 你应该返回如下子树:

  2     
 / \   
1   3

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

解题思路分析:

解法1:

首先要解决这道题,应该先关注到这是一个二叉搜索树。二叉搜索树主要是对于左右的节点,左子节点及其子节点均小于根节点,右子节点及所有子节点均大于根节点。因此想要从二叉搜索树中查找目标元素,可以直接对二叉搜索树进行遍历。目标值与每个节点进行比较,根据目标值与节点值的大小关系,进行左右的递归遍历,直到找到目标值。如果遍历到结束并未找到目标值,则认为该二叉搜索树中不存在此值。以此方式递归即可得到题目所需的目标结果。

public TreeNode searchBST(TreeNode root, int val) {
    if(root == null){
        return null;
    }

    if(root.val == val){
        return root;
    }else if(root.val > val){
        return searchBST(root.left,val);
    }else{
        return searchBST(root.right,val);
    }
}

复杂度分析

  • 时间复杂度 o(n)
  • 空间复杂度 o(1)

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。