精进Leetcode每日一题-1125

这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战

目标:拼搏30天,拿到11月的Leetcode 月度勋章。今天是第 26 天。

700. 二叉搜索树中的搜索

给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。

分析:

这是一道常见的面试题。可以说十分简单。 首先,我们需要了解二叉搜索树满足如下性质:

  • 左子树所有节点的元素值均小于根的元素值;
  • 右子树所有节点的元素值均大于根的元素值。

据此可以得到如下算法:

1. 方法1:递归方法

1.1 若 root 为空则返回空节点;

1.2 若 val=root.val,则返回 root;

1.3 若 val<root.val,递归左子树;

1.4 若 val>root.val,递归右子树。

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if (root == null) {
            return null;
        }
        if (val == root.val) {
            return root;
        }
        return searchBST(val < root.val ? root.left : root.right, val);
    }
}
复制代码
  • 时间复杂度:O(N),其中 N 是二叉搜索树的节点数。
  • 空间复杂度:O(N)。
  1. 方法2:迭代方法

2.1 若 root 为空则跳出循环,并返回空节点;

2.2 若 val=root.val,则返回 root;

2.3 若 val<root.val,将 root 置为root.left;

2.4 若val>root.val,将 root 置为 root.right。

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        while (root != null) {
            if (val == root.val) {
                return root;
            }
            root = val < root.val ? root.left : root.right;
        }
        return null;
    }
}
复制代码
  • 时间复杂度:O(N),其中 N 是二叉搜索树的节点数。
  • 空间复杂度:O(1)。

提交排名

image.png

Guess you like

Origin juejin.im/post/7034760718184349704