力扣:二叉搜索树中的搜索java
递归法和迭代法
递归:
递归三部曲:
- 参数返回值:参数为根节点和目标值
- 结束条件:
节点为空返回null,节点为目标值返回该节点 - 递归逻辑:
- 创建一个result,用来保存得到的节点用于返回
- 判断该点值是否大于目标值,大于则递归调用参数为该接节点的左子树。小于则递归调用参数为该接节点的右子树。并将返回值存入result。
- 返回result。
递归代码
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if(root == null) return null;//结束条件,节点为空返回null
if(root.val == val) return root;//结束条件,节点为目标值返回该节点
TreeNode result = null;//存储结果节点
if(root.val>val) result = searchBST(root.left,val);//比较,选择判断左还是右子树
if(root.val<val) result = searchBST(root.right,val);
return result;
}
}
迭代:先序遍历
流程:利用搜索二叉树特性
- node赋值为root
- 循环node不为空,判断node的值大于目标值就node赋值为node的左子树,小于就赋值为右子树,等于返回node。
- 最后返回null(没有相等的)
迭代代码
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
TreeNode node=root;
while(node != null){//节点 不为空说明还有可以搜索节点
if(node.val>val) node = node.left;//比较,选择左右子树
else if(node.val<val) node = node.right;
else return node;
}
return null;
}
}