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;
}
}
博客围绕Leetcode 700题,介绍二叉搜索树中的搜索。二叉搜索树是有序树,左子树结点值小于根结点,右子树结点值大于根结点。给出递归法和迭代法两种解法,递归法根据根结点值与目标值大小关系搜索左右子树,迭代法根据当前结点值确定搜索方向,两种方法时间复杂度均为O(n)。
676

被折叠的 条评论
为什么被折叠?



