【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

扫描二维码关注公众号,回复: 11354393 查看本文章

方法二:迭代

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

  • 如果根节点不空 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

猜你喜欢

转载自blog.csdn.net/weixin_43314519/article/details/106878616
今日推荐