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

  • 相关阅读:
    【WCF--初入江湖】04 WCF通信模式
    【WCF--初入江湖】03 配置服务
    c++输出左右对齐设置
    setw()函数
    clion更改大括号的位置
    emacs org-mode 中文手册精简版(纯小白)
    c++ string 类型 大小写转换 
    C++中string类型的find 函数
    string类型 C++
    统计单词数---单词与空格
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13308047.html
Copyright © 2011-2022 走看看