0700. 二叉搜索树中的搜索【简单】
1. 📝 题目描述
给定二叉搜索树(BST)的根节点 root 和一个整数值 val。
你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null。
示例 1:

txt
输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]1
2
2
示例 2:

txt
输入:root = [4,2,7,1,3], val = 5
输出:[]1
2
2
提示:
- 树中节点数在
[1, 5000]范围内 1 <= Node.val <= 10^7root是二叉搜索树1 <= val <= 10^7
2. 🎯 s.1 - 递归搜索
js
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} val
* @return {TreeNode}
*/
var searchBST = function (root, val) {
// 基础情况:节点为空或找到目标值
if (!root || root.val === val) {
return root
}
// 利用BST性质进行搜索
if (val < root.val) {
// 目标值小于当前节点值,在左子树中搜索
return searchBST(root.left, val)
} else {
// 目标值大于当前节点值,在右子树中搜索
return searchBST(root.right, val)
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- 时间复杂度:
,其中 h 是二叉搜索树的高度,最坏情况下需要从根节点搜索到叶子节点 - 空间复杂度:
,递归调用栈的深度等于树的高度
3. 🎯 s.2 - 迭代搜索
js
/**
* @param {TreeNode} root
* @param {number} val
* @return {TreeNode}
*/
var searchBST = function (root, val) {
while (root) {
if (root.val === val) {
return root
} else if (val < root.val) {
root = root.left
} else {
root = root.right
}
}
return null
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- 时间复杂度:
,其中 h 是二叉搜索树的高度 - 空间复杂度:
,只使用了常数个额外变量