【LeetCode】第700题——二叉搜索树中的搜索(难度:简单)

【LeetCode】第700题——二叉搜索树中的搜索(难度:简单)

题目描述

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

  1. 示例1
    给定二叉搜索树:

         4
        / \
       2   7
      / \
     1   3	
    

    和值: 2
    你应该返回如下子树:

       2     
      / \   
     1   3
    
  2. 在示例1中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-in-a-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

利用二叉搜索树的性质,如果root.val == val则返回root,如果root.val > val则继续遍历root.left,如果root.val < val则继续遍历root.right。

此题可用递归和迭代两种编程方法解答。

代码详解

方法一:递归

/**
 * 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 || root.val == val) {	// 如果节点为空或者节点值等于val则返回该节点,空节点也返回空
            return root;
        } else if(root.val > val) {	// 大于就遍历左孩子节点
            return searchBST(root.left, val);
        } else {	// 小于就遍历右孩子节点
            return searchBST(root.right, val);
        }
    }
}

方法二:迭代

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        while(root != null) {	// 循环终止条件
            if(root.val == val) {	// 等于就返回本身节点
                return root;
            } else if(root.val > val) {	// 大于就遍历左孩子节点
                root = root.left;
            } else {	// 小于就遍历右孩子节点
                root = root.right;
            }
        }
        return null;	// 运行至此说明没有目标节点,返回null
    }
}

注意点

  • 上述两种思路均有找不到目标节点而返回null的分支,不要担心会无限循环下去。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值