力扣-[700. 二叉搜索树中的搜索]

递归法 确定递归函数的参数和返回值 递归函数的参数传入的就是根节点和要搜索的数值,返回的就是以这个搜索数值所在的节点。

代码如下:

 public TreeNode searchBST(TreeNode root, int val)

确定终止条件 如果root为空,返回null,找到这个数值了,就返回root节点。

if(root==null) return null;
if(root.val==val){
    return root;
}

确定单层递归的逻辑 看看二叉搜索树的单层递归逻辑有何不同。

因为二叉搜索树的节点是有序的,所以可以有方向的去搜索。

如果root.val > val,搜索左子树,如果root.val < val,就搜索右子树,最后如果都没有搜索到,就返回NULL。

代码如下:

if(val<root.val){
    return searchBST(root.left,val);
}
if(val>root.val){
    return searchBST(root.right,val);
}
return null;

迭代法 一提到二叉树遍历的迭代法,可能立刻想起使用栈来模拟深度遍历,使用队列来模拟广度遍历。

对于二叉搜索树可就不一样了,因为二叉搜索树的特殊性,也就是节点的有序性,可以不使用辅助栈或者队列就可以写出迭代法。

对于一般二叉树,递归过程中还有回溯的过程,例如走一个左方向的分支走到头了,那么要调头,在走右分支。

而对于二叉搜索树,不需要回溯的过程,因为节点的有序性就帮我们确定了搜索的方向。

例如要搜索元素为3的节点,我们不需要搜索其他节点,也不需要做回溯,查找的路径已经规划好了。

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
       while(root!=null){
        if(root.val==val) return root;
        else if(val<root.val) root=root.left;
        else root=root.right;
       }
       return null;
    }
}

相关推荐

  1. 700搜索搜索

    2024-03-13 22:40:03       13 阅读
  2. [题解] 700. 搜索搜索

    2024-03-13 22:40:03       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-13 22:40:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-13 22:40:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-13 22:40:03       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-13 22:40:03       20 阅读

热门阅读

  1. vue从零到一创建项目?

    2024-03-13 22:40:03       20 阅读
  2. python 基础练习题

    2024-03-13 22:40:03       14 阅读
  3. ElasticSearch 搜索推荐

    2024-03-13 22:40:03       20 阅读
  4. ES6 类的扩展

    2024-03-13 22:40:03       17 阅读
  5. js的事件有哪些?

    2024-03-13 22:40:03       20 阅读
  6. Android adb启动app方式

    2024-03-13 22:40:03       19 阅读
  7. 【SpringBoot】多环境切换的灵活配置

    2024-03-13 22:40:03       24 阅读
  8. 车联网术语汇总 车联网术语汇总

    2024-03-13 22:40:03       19 阅读
  9. UE5 获取各个信息的像素

    2024-03-13 22:40:03       25 阅读
  10. 基础 | 并发编程 - [线程状态]

    2024-03-13 22:40:03       24 阅读