题目地址(700. 二叉搜索树中的搜索)

https://leetcode-cn.com/problems/search-in-a-binary-search-tree/

题目描述

  1. 给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL
  2. 例如,
  3. 给定二叉搜索树:
  4. 4
  5. / \
  6. 2 7
  7. / \
  8. 1 3
  9. 和值: 2
  10. 你应该返回如下子树:
  11. 2
  12. / \
  13. 1 3
  14. 在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL

前置知识


公司

  • 暂无

思路

利用 二叉搜索树左小右大的特性 搜索特定的边

关键点


代码

  • 语言支持:Java

Java Code:

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode() {}
  8. * TreeNode(int val) { this.val = val; }
  9. * TreeNode(int val, TreeNode left, TreeNode right) {
  10. * this.val = val;
  11. * this.left = left;
  12. * this.right = right;
  13. * }
  14. * }
  15. */
  16. class Solution {
  17. //方法返回值 返回树节点 参数为节点和要判断的值 直接用原方法
  18. public TreeNode searchBST(TreeNode root, int val) {
  19. //中止条件 如果节点等于null 就返回null 如果等于目标值 就返回root
  20. if (root == null || root.val == val) {
  21. return root;
  22. }
  23. //单层逻辑 根据二叉搜索树的特性 左边的数小于根节点 右边相反 所以只需要搜索单边 不需要遍历整棵树
  24. //当需要搜索单边或者特定边的时候 递归的时候直接return 搜索整颗树的时候不需要return
  25. if (root.val > val) {
  26. return searchBST(root.left, val);
  27. }else {
  28. return searchBST(root.right, val);
  29. }
  30. }
  31. }

复杂度分析

令 n 为数组长度。

  • 时间复杂度:700. 二叉搜索树中的搜索 - 图1#card=math&code=O%28n%29&id=hOhHn)
  • 空间复杂度:700. 二叉搜索树中的搜索 - 图2#card=math&code=O%28n%29&id=NFRlt)