zoukankan      html  css  js  c++  java
  • 【LeetCode】700.二叉搜索树中的搜索(递归+迭代,java实现)

    题目

    image-20200620205551287

    解析

    二叉搜索树特性

    二叉搜索树是一棵二叉树,每个节点都有以下特性:

    • 大于左子树上任意一个节点的值,
    • 小于右子树上任意一个节点的值。

    一个二叉搜索树的例子:

    img

    二叉搜索树中复杂度为对数时间的操作:

    • 查找。
    • 插入。
    • 删除。

    方法一:递归

    算法

    递归实现非常简单:

    • 如果根节点为空 root == null 或者根节点的值等于搜索值 val == root.val,返回根节点。
    • 如果 val < root.val,进入根节点的左子树查找 searchBST(root.left, val)
    • 如果 val > root.val,进入根节点的右子树查找 searchBST(root.right, val)
    • 返回根节点。

    img

    代码:

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

    复杂度分析

    image-20200620212046724

    方法二:迭代

    为了降低空间复杂度,将递归转换为迭代:

    • 如果根节点不空 root != null 且根节点不是目的节点 val != root.val
      • 如果 val < root.val,进入根节点的左子树查找 root = root.left
      • 如果 val > root.val,进入根节点的右子树查找 root = root.right
    • 返回 root

    img

    代码:

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

    复杂度分析

    image-20200620212145690

  • 相关阅读:
    交换变量方法总结
    Java Object Model(一)
    Git命令文本手册
    移动端浏览器touch事件的研究总结
    jQuery中的end()方法
    AngularJs开发——控制器间的通信
    网站收藏
    HTTP Content-type 对照表
    ViewData和ViewBag的那些事
    jQuery选择器
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13308047.html
Copyright © 2011-2022 走看看