Leetcode 700.二叉搜索树中的搜索 Search in a Binary Search Tree(Java)
##Tree##
二叉搜索树中的搜索
二叉搜索树是一个有序树
- 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
- 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
- 它的左、右子树也分别为二叉搜索树
可以采用递归法和迭代法
递归法
-
树的根节点为空时
root == null
,返回null
-
树的根节点的值等于目标值
root.val == val
,返回该根节点 -
树的根节点的值大于目标值
root.val > val
,递归搜索左子树 -
树的根节点的值小于目标值
root.val < val
,递归搜索右子树
时间复杂度: O(n)
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if (root == null) return null;
else if (root.val == val) return root;
else if (root.val > val) return searchBST(root.left, val);
else return searchBST(root.right, val);
}
}
迭代法
迭代法不需依靠队列,因为在二叉搜索树中搜索时,下一步搜索左子树还是右子树都是可以根据当前结点的值确定的
时间复杂度: O(n)
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
while (root != null) {
if (root.val > val) root = root.left;
else if (root.val < val) root = root.right;
else return root;
}
return null;
}
}