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

  • 相关阅读:
    Prototype
    Builder Pattern
    Chain of Responsibility
    Flyweight
    HBase概念学习(九)HTablePool为何弃用?
    用web查看hadoop运行状态
    Hadoop的位置
    SQLServer的TDE加密
    Log4Net advanced pattern tips
    Forrest Gump
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13308047.html
Copyright © 2011-2022 走看看