数据结构与算法——Java实现 51.力扣700题——二叉搜索树中的搜索操作

只是你走得好快,不回头看看我们一起走过的路吗

------ 24.11.2

700. 二叉搜索树中的搜索

给定二叉搜索树(BST)的根节点 root 和一个整数值 val。

你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。

示例 1:

输入: root = 4,2,7,1,3, val = 2 输出:2,1,3

示例 2:

输入: root = 4,2,7,1,3, val = 5

复制代码
输出:[]

方法1 非递归寻找

思路

由于二叉搜索树的特性为左孩子的key值小于根节点的key值,根节点的key值小于右孩子的key值,根据传入的key值与根节点的key值相比,一层层不断循环迭代,找到最终结果

java 复制代码
/**
 * 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) {
        while(root != null){
            if(root.val > val){
                root = root.left;
            }else if(root.val < val){
                root = root.right;
            }else{
                return root;
            } 
        }
        return null;
    }
}

方法2 递归寻找

思路

由于二叉搜索树的特性为左孩子的key值小于根节点的key值,根节点的key值小于右孩子的key值,根据传入的key值与根节点的key值相比,一层层不断递归,若是root的key值小于传入的key值,则说明应该在root的右子树部分,将root更新为root.right,反之,则更新为root.left

java 复制代码
/**
 * 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 searchBST(root.left,val);
        }else if(root.val < val){
            return searchBST(root.right,val);
        }else{
            return root;
        } 
    }
}
相关推荐
考研保研资料分享20 分钟前
2022编辑出版跨保西北大学中国史:五校面试与九月补材料
面试·职场和发展
Data analyse4561 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
员工风险管理实务1 小时前
职务侵占有什么价值?岗位关联性与必要性判断
职场和发展
Navigator_Z2 小时前
LeetCode //C - 1293. Shortest Path in a Grid with Obstacles Elimination
c语言·算法·leetcode
Nil2083 小时前
leetcode 64最小路径和
算法·leetcode·职场和发展
光影少年3 小时前
AI Agent、自动化与未来工作
人工智能·算法·架构
牧羊人.3333 小时前
计算机视觉基础 第16章|EigenFace,FisherFace,LBPH传统人脸识别算法
人工智能·算法·计算机视觉
考研保研资料分享3 小时前
双非新闻学保研复盘:东华小组展示、长安面试与兰大预推免
面试·职场和发展
Nil2083 小时前
leetcode 72编辑距离
算法·leetcode·职场和发展
神工坊4 小时前
技术分享︱SIMFORGE HSF® 网格加密与热点加速技术实践
算法·hpc·网格·cae·工程仿真·数值引擎·samr