JAVA版本
解法一:
使用递归的解法,主要是利用二叉搜索数的特性来完成。
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if(root ==null || root.val ==val) {
return root;
}
if(root.val < val) { //二叉搜索树的性质来完成
return searchBST(root.right,val);
}else{
return searchBST(root.left,val);
}
}
}
解法二:使用二叉树的迭代法,使用栈来直接完成迭代的过程,不使用二叉搜索树的特性。
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if(root ==null || root.val ==val) {
return root;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()) {
TreeNode pop = stack.pop();
if(pop.val == val){
return pop;
}
if (pop.right != null) {
stack.push(pop.right);
}
if (pop.left != null) {
stack.push(pop.left);
}
}
return null;
}
}
解法三:使用二叉搜索树的特性来完成迭代。
class Solution {
// 迭代,利用二叉搜索树特点,优化,可以不需要栈
public TreeNode searchBST(TreeNode root, int val) {
while (root != null)
if (val < root.val) root = root.left;
else if (val > root.val) root = root.right;
else return root;
return null;
}
}