给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。

例如,

给定二叉搜索树:

        4
       / \
      2   7
     / \
    1   3

和值: 2

你应该返回如下子树:

      2     
     / \   
    1   3

在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL

Related Topics
  • 二叉搜索树
  • 二叉树

  • 👍 146
  • 👎 0
  • 题解

    直白简单,搜索树特性。左小又大,递归先写个,

    
    //leetcode submit region begin(Prohibit modification and deletion)
    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    class Solution {
        public TreeNode searchBST(TreeNode root, int val) {
            if (root==null)return null;
            if (root.val == val)return root;
            if (root.val > val){
                return searchBST(root.left,val);
            }
            return searchBST(root.right,val);
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)

    结果

    解答成功:
    执行耗时:0 ms,击败了100.00% 的Java用户
    内存消耗:39.6 MB,击败了5.26% 的Java用户

    内存消耗应该是来自于递归栈空间消耗。再试着不递归写个吧

    class Solution {
        public TreeNode searchBST(TreeNode root, int val) {
            while (!(null==root || root.val==val)){
                root = root.val > val ? root.left : root.right;
            }
            return root;
        }
    }
    解答成功:
    执行耗时:0 ms,击败了100.00% 的Java用户
    内存消耗:39.2 MB,击败了62.94% 的Java用户

    勉强还行吧….