题解:
思路一:
迭代:题目非常简单,普通的二叉搜索树查找。 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
// 二叉搜索树性质, 左子树的值都比根节点小, 右子树的值都比根节点大。
// 当节点值小于 当前节点值时, 查找其左子树。
// 当节点值大于 当前节点值时, 查找其右子树
// 相等时 返回
// 找到最后,不存在则返回 null
// 迭代
public TreeNode searchBST1(TreeNode root, int val) {
while (root != null){
if (root.val == val) return root;
if (root.val > val){
root = root.left;
}else {
root = root.right;
}
}
return null;
}
|
时间复杂度: O(H) ,其中H为树高,平均时间复杂度 O(log N), 最坏时间复杂度: O(N).
空间复杂度: O(1)。
思路二:
递归 , 代码如下:
1
2
3
4
5
6
7
8
9
10
|
// 递归
public TreeNode searchBST(TreeNode root, int val) {
if (root == null) return root;
if (root.val == val) return root;
if (root.val > val) return searchBST(root.left,val);
return searchBST(root.right,val);
}
|
时间复杂度: O(H) ,其中H为树高,平均时间复杂度 O(log N), 最坏时间复杂度: O(N).
空间复杂度: O(H), 平均情况下深度为 O(logN),最坏情况下深度为 O(N)O(N)