LeetCode算法题-Search in a Binary Search Tree(Java实现)

Java实现:二叉搜索树(Binary Search Tree) 目录 一、二叉搜索树 二、完整代码实现(Java) 1、二叉搜索树 1.1、 基本概念 二叉树的一个性质是一棵平均二叉树的深度要比节点个数N小得多。分析表明其平均深度为 O(√N)O(N) ,而对于特殊类型的二叉树,即二叉查找树(binary search tree),其深度的平均值为 O(logN)O(logN) 。 二叉查找树的性质:对于树中的每个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项。 由于树的递归定义,通常是递归地编写那些操作的例程。因为二叉查找 阅读详情

这是悦乐书的第295次更新,第314篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第163题(顺位题号是700)。给定一个二叉搜索树(BST)的和正整数val。 你需要在BST中找到节点的值等于给定val的节点。返回以该节点为根的子树。如果此节点不存在,则应返回null。例如:

鉴于树:

        4
       / \
      2   7
     / \
    1   3

以及搜索的价值val:2

你应该返回这个子树:

      2     
     / \   
    1   3

在上面的示例中,如果我们要搜索值5,因为没有值为5的节点,我们应该返回null。

注意:空树由null表示,因此你可以将预期输出(序列化树格式)视为[],而不是null。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

直接使用递归。因为题目给的二叉树是BST,其中序遍历的节点值是从小到大排列且有序的,因此,直接使用中序遍历的顺序,按照左子树–>根–>右子树的顺序遍历即可。

// 借助中序遍历,左根右的顺序
public TreeNode searchBST(TreeNode root, int val) {
    // 先判空
    if (root == null) {
        return null;
    }
    // 如果val大于当前节点值,就往右子树里面找
    if (root.val < val) {
          return searchBST(root.right, val);
    }
    // 如果相等,返回当前以节点为根节点的子树
    if (root.val == val) {
        return root;
    }
    // 如果val小于当前节点值,就往左子树里面找
    if (root.val > val) {
          return searchBST(root.left, val);
    }
    return null;
}

03 第二种解法

也可以世界使用迭代的方式,借助while循环来实现,循环内部的判断逻辑和第一种解法类似,如果当前节点值大于val,就进入左子树找;如果当前节点值小于val,就进入右子树找;如果相等,直接返回以当前节点为根节点的子树。

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;
}

04 第三种解法

我们也可以使用队列来做。将所有节点值依次入队列,在入队列前先判断节点值是否等于val,等于就直接返回当前节点所在子树。

public TreeNode searchBST(TreeNode root, int val) {
    if (root == null || root.val == val) {
        return root;
    }
    Queue<TreeNode> queue = new LinkedList<TreeNode>();
    queue.offer(root);
    while (!queue.isEmpty()) {
        TreeNode temp = queue.poll();
        if (temp.val == val) {
            return temp;
        } 
        if (temp.left != null) {
            queue.offer(temp.left);
        }
        if (temp.right != null) {
            queue.offer(temp.right);
        }
    }
    return null;
}

05 第四种解法

我们也可以将第三种方法再优化,不必所有的节点都进队列,根据节点值的大小,来判断是进左子树还是进右子树,此解法与第二种解法类似,但是使用队列会有点多余,直接使用第二种解法会更好,第二种解法的空间复杂度更低。

public TreeNode searchBST(TreeNode root, int val) {
    if (root == null || root.val == val) {
        return root;
    }
    Queue<TreeNode> queue = new LinkedList<TreeNode>();
    queue.offer(root);
    while (!queue.isEmpty()) {
        TreeNode temp = queue.poll();
        if (temp != null && temp.val == val) {
            return temp;
        } else if (temp != null && temp.val > val) {
            queue.offer(temp.left);
        } else if (temp != null && temp.val < val) {
            queue.offer(temp.right);
        }
    }
    return null;
}

06 小结

算法专题目前已日更超过四个月,算法题文章163+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

【LeetCode】Recover Binary Search Tree 解题报告 【题目】 Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing its structure. Note: A solution using O(n) space is pretty straight forward. Could 阅读详情

相关推荐

BinaryTree_BinarySearchTree_AVLTree

该代码包括了二叉树、二叉查找树、平衡树的Java实现代码

Java 数据结构之二叉搜索树(头歌平台,详细注释)

Java 数据结构之二叉搜索树

qwertf123的博客 1450

Binary_Search_Tree:用Java实现的二叉搜索树

Binary_Search_Tree 用java实现的二叉搜索树

【LeetCode】700. Search in a Binary Search Tree 解题报告(Python)

【LeetCode】700. Search in a Binary Search Tree 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/s...

负雪明烛 3592

Dify+firecrawl:一个超好用的网页转Markdown API,打造你的第一个能检索爬虫RAG知识库的聊天机器人

Firecrawl是一个超简单的API服务——你扔给它一个URL,它就能把整个网站(包括子页面!)的内容自动抓下来,并且转换成干净、易读的Markdown格式。不用配置网站的站点地图,不用写爬虫规则,API调一下,数据直接到手。接下来我们一起本地部署吧!

2501_91673550的博客 2992

Spring AI 项目实战(十):Spring Boot + AI + DeepSeek 构建智能合同分析技术实践(附完整源码)

摘要:基于Spring AI的智能合同审核系统开发 本文介绍了基于Spring Boot 3.2.0和Spring AI 1.0.0-M4构建的智能合同审核系统。系统采用分层架构设计,整合DeepSeek API实现文档解析、条款提取和风险分析功能。核心技术栈包括Spring AI、H2数据库、Apache POI/PDFBox等文档处理工具,实现了合同条款语义分析、异常识别和审核报告自动生成。项目解决了传统人工审核效率低、主观性强等问题,为合同管理提供了智能化解决方案。文章详细阐述了系统架构设计、技术选型

博客 654

[Leetcode]Verify Preorder Sequence in Binary Search Tree

Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary search tree. You may assume each number in the sequence is unique. Follow up: Could you do it

dyllanzhou的专栏 1565

基于YOLOv11的建筑图纸物体检测系统设计与实现

包含多种建筑平面图,标注了墙体、门窗等元素:CAD格式的建筑图纸数据集:专门针对建筑元素的标注数据集自定义数据集:使用LabelImg等工具自行标注的建筑图纸本文以FloorPlanDataset为基础,结合部分自定义标注数据构建混合数据集。wall (墙体)door (门)window (窗)stair (楼梯)furniture (家具)text (文字标注)dimension (尺寸标注)column (柱子)

YOLO 537

search() java_LeetCode算法题-Search in a Binary Search Tree(Java实现)

这是悦乐书的第295次更新,第314篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第163题(顺位题号是700)。给定一个二叉搜索树(BST)的和正整数val。 你需要在BST中找到节点的值等于给定val的节点。返回以该节点为根的子树。如果此节点不存在,则应返回null。例如:鉴于树:4/ \2 7/ \1 3以及搜索的价值val:2你应该返回这个子树:2/ \1...

weixin_29442195的博客 98

软件需求规格说明书(SRS)深入解析

摘要: SRS(软件需求规格说明书)是定义系统功能、性能与接口的核心文档,为开发、测试、项目管理提供依据。标准结构包括引言、总体描述、功能/非功能需求、接口等模块。撰写需确保清晰、可验证、无歧义,避免模糊术语。示例展示学生注册模块的需求写法,强调性能与安全性要求。推荐使用Confluence、StarUML等工具辅助编写,交付时需包含主文档、原型图及需求跟踪矩阵。SRS应兼具技术性与管理性,作为沟通桥梁和验收标准。

moton2017的博客 2933

yolov26改进 | Neck/颈部创新篇 | 独创HFPN利用分层特征融合块HFFB模块融合多层次特征改进yolov26(全网独家创新)

本文提出了一种创新的分层特征融合模块HFFB(Hierarchical Feature Fusion Block)来改进YOLOv26的neck部分,构建了名为HFPN的新型特征金字塔网络。该模块通过三分支结构融合局部特征(CNN提取)、全局特征(Swin Transformer提取)和中间特征,并包含空间注意力(SA)、通道注意力(CA)和残差反向MLP(IRMLP)等组件来优化特征融合效果。实验表明,该方法能针对不同尺度目标(大/中/小)进行自适应检测,可根据具体数据集需求选择不同配置。文章详细提供了核

Snu77的博客 486

java算法 library search_LeetCode算法题-Search in a Binary Search Tree(Java实现)

这是悦乐书的第295次更新,第314篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第163题(顺位题号是700)。给定一个二叉搜索树(BST)的和正整数val。 你需要在BST中找到节点的值等于给定val的节点。返回以该节点为根的子树。如果此节点不存在,则应返回null。例如:鉴于树:4/ \2 7/ \1 3以及搜索的价值val:2你应该返回这个子树:2/ \1...

weixin_39895684的博客 101

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

算法如诗的博客 5589

LeetCode算法题-Trim a Binary Search Tree(Java实现)

这是悦乐书的第284次更新,第301篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第152题(顺位题号是669)。给定二叉搜索树以及L和R的最低和最高边界,修剪树以使其所有元素位于[L,R](R> = L)。可能需要更改树的根,因此结果应返回修剪后的二叉搜索树的新根。例如: 输入:L = 1 R = 2 1 / \ 0 2 输出: ...

小川的博客 215

uniapp [全端兼容] - 实现上传本地视频到后端服务器及在线预览播放视频+移除视频+进度条上传,将已选视频上传服务端并可预览视频和删除功能,上传单个或多个视频文件及大文件(H5、小程序、app)

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,uniapp+uview上传视频并预览,UNI-APP视频上传组件,实现视频文件上传视频回显,上传视频并预览、上传多个视频,实现上传视频功能+预览,上传显示视频功能,上传视频预览移除,批量上传视频,上传超大视频文件,视频上传并预览效果,uniapp上传视频,使用uview上传视频及预览,上传视频和删除视频功能,视频流上传播放功能,上传视频到后端,视频上传与实时预览功能,upload上传组件,视频播放器

🏆 前端领域优质创作者 1万+

【38】OpenCV C++实战篇——基于多项式插值的亚像素边缘定位算法

亚像素边缘定位算法实现 本文介绍了一种基于多项式插值的亚像素边缘定位算法,用于提高图像边缘检测的精度。文章首先分析了传统像素级边缘检测方法(如Canny、Sobel)的局限性,指出其在测量应用中的精度不足问题。 算法核心 梯度计算:使用8个方向模板进行卷积运算生成梯度图像 亚像素定位:采用多项式插值方法改进边缘定位精度 实现步骤: 生成8个方向的卷积模板(0°、45°、90°等) 利用filter2D函数计算各方向梯度 通过归一化处理显示梯度图像 代码特点 提供完整的C++实现代码 包含模板生成、梯度计算和

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1099

LeetCode算法题-Find Mode in Binary Search Tree(Java实现)

这是悦乐书的第246次更新,第259篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第113题(顺位题号是501)。给定具有重复项的二叉搜索树(BST),找到给定BST中的所有模式(最常出现的元素)。假设BST定义如下: 节点的左子树仅包含键小于或等于节点键的节点。 节点的右子树仅包含键大于或等于节点键的节点。 左右子树也必须是二叉搜索树。 例如: 鉴于BST [1,...

小川的博客 256

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

leetcode85java_LeetCode算法题-Find Mode in Binary Search Tree(Java实现)

这是悦乐书的第246次更新,第259篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第113题(顺位题号是501)。给定具有重复项的二叉搜索树(BST),找到给定BST中的所有模式(最常出现的元素)。假设BST定义如下:节点的左子树仅包含键小于或等于节点键的节点。节点的右子树仅包含键大于或等于节点键的节点。左右子树也必须是二叉搜索树。例如:鉴于BST [1,null,2,2...

weixin_35353904的博客 202

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Leetcode学习笔记:#1008. Construct Binary Search Tree from Preorder Traversal

Leetcode学习笔记:#1008. Construct Binary Search Tree from Preorder Traversal Return the root node of a binary search tree that matches the given preorder traversal. (Recall that a binary search tree is a ...

ccystewart的博客 232

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

leetcode 99. Recover Binary Search Tree

复习数据结构:二叉查找树 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public cl

独钓寒江雪 343

LeetCode 700. Search in a Binary Search Tree

LeetCode 700. Search in a Binary Search Tree (Easy) 主要知识点:树、递归 、迭代;优先级:3

温迪今天刷题了吗 189

【Leetcode】Recover Binary Search Tree

题目链接:https://leetcode.com/problems/recover-binary-search-tree/ 题目: Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing its structure. Note:

业精于勤,荒于嬉 3329

Leetcode 700.二叉搜索树中的搜索 Search in a Binary Search Tree(Java)

Leetcode 700.二叉搜索树中的搜索 Search in a Binary Search Tree(Java) ##Tree## 二叉搜索树中的搜索 二叉搜索树是一个有序树 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树 可以采用递归法和迭代法 递归法 树的根节点为空时root == null ,返回null 树的根节点的值等于目标值root.val == val,返回该根节

qq_42411921的博客 207
上一篇: LeetCode算法题-Degree of an Array(Java实现)
下一篇: LeetCode算法题-Kth Largest Element in a Stream(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值