原题链接
- 可以采用层序遍历的解法 如第一种方式
- 也可以采用递归解法 如第二种
- 二刷:若找到则直接返回 当前的节点即可
- 二刷:使用递归实现的过程中,最后的通过root.val的节点值,来选择是searchBST左子树和右子树的时候,选择的方式是 root.val < val ? … : …, 此时不用添加 if 条件判断
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
Queue<TreeNode> que = new LinkedList<>();
que.offer(root);
while(!que.isEmpty()){
int size = que.size();
for(int i = 0; i < size; i++){
TreeNode node = que.poll();
if(node.val == val){
return node;
}
if(node.left != null) que.offer(node.left);
if(node.right != null) que.offer(node.right);
}
}
return null;
}
}
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if (root == null || root.val == val) return root;
return root.val < val ? searchBST(root.right, val) : searchBST(root.left, val);
}
}