📅  最后修改于: 2023-12-03 15:12:43.488000             🧑  作者: Mango
给定一棵二叉查找树和一个目标值,编写一个函数来搜索目标值在树中是否存在。如果存在,返回 true;否则,返回 false。
public boolean searchBST(TreeNode root, int val) {
}
输入:
4
/ \
2 7
/ \
1 3
val = 2
输出: true
输入:
4
/ \
2 7
/ \
1 3
val = 5
输出: false
题目要求搜索二叉查找树(BST)中是否存在目标值。由于二叉查找树是具有特殊性质的二叉树,根据其特性,我们可以采用递归或迭代的方法进行搜索。
假设当前搜索的节点为root,目标值为val:
public boolean searchBST(TreeNode root, int val) {
if (root == null) {
return false;
} else if (root.val == val) {
return true;
} else if (root.val > val) {
return searchBST(root.left, val);
} else {
return searchBST(root.right, val);
}
}
假设当前搜索的节点为cur,目标值为val:
public boolean searchBST(TreeNode root, int val) {
TreeNode cur = root;
while (cur != null) {
if (cur.val == val) {
return true;
} else if (cur.val > val) {
cur = cur.left;
} else {
cur = cur.right;
}
}
return false;
}
二叉查找树的特性决定了此题可以采用递归或迭代的方法进行搜索。因此,时间复杂度为O(h),其中h为二叉查找树的高度。如果树是平衡的,则时间复杂度为O(log n),其中n是树中节点的总数。如果树是不平衡的,则时间复杂度为O(n),其中n是树中节点的总数。空间复杂度为O(h),其中h为递归栈的最大深度。
此题考查对二叉查找树的理解和掌握,需要掌握二叉查找树的特性和递归/迭代的搜索方法。此外,需要注意搜索的细节和边界条件,如树为空、根节点为空等情况。题目的解法不唯一,可以用二叉查找树的中序遍历进行深入剖析和理解。