二叉搜索树的搜索

力扣链接🔗

二叉搜索树的搜索 - 图1

代码分析

递归法

  1. 确定递归函数的参数和返回值

递归函数的参数传入的就是根节点和要搜索的数值,返回的就是以这个搜索数值所在的节点。

  1. 2. 确定终止条件

如果root为空,或者找到这个数值了,就返回root节点。

  1. 3. 确定单层递归的逻辑

如果root->val > val,搜索左子树,如果root->val < val,就搜索右子树,最后如果都没有搜索到,就返回NULL。

  1. /**
  2. * 递归法
  3. *
  4. * @param root
  5. * @param val
  6. * @return
  7. */
  8. public TreeNode searchBST(TreeNode root, int val) {
  9. // 找到值以后,停止递归
  10. if (root == null || root.val == val) {
  11. return root;
  12. }
  13. // 根据二叉搜索树的规律进行递归,注意使用了return,因为找到了就返回,不需要遍历整颗树
  14. if (root.val > val) return searchBST(root.left, val);
  15. if (root.val < val) return searchBST(root.right, val);
  16. // 没有找到
  17. return null;
  18. }

迭代法

使用中序递归迭代即可。

  1. /**
  2. * 递归法
  3. *
  4. * @param root
  5. * @param val
  6. * @return
  7. */
  8. public TreeNode searchBST(TreeNode root, int val) {
  9. // 由于二叉搜索树已经确认了迭代的方向,所以不需要栈也不需要回溯
  10. while (root != null) {
  11. if (root.val > val) root = root.left;
  12. else if (root.val < val) root = root.right;
  13. else return root;
  14. }
  15. return null;
  16. }