从「树的搜索」到 BST 有序性:LogicStack-LeetCode 仓库中 LeetCode 700 二叉搜索树搜索的递归与迭代解法
教程文档【免费下载链接】LogicStack-LeetCode公众号「宫水三叶的刷题日记」刷穿 LeetCode 系列文章源码项目地址https://gitcode.com/gh_mirrors/lo/LogicStack-LeetCode点击查看免费下载本文基于「宫水三叶的刷题日记」系列仓库 LogicStack-LeetCode 中的 LeetCode 700. 二叉搜索树中的搜索简单 题解展开。这是一道难度为「简单」、Tag 为「树的搜索 / 迭代 / 递归」的入门题给定一棵二叉搜索树BST的根节点和一个值在 BST 中查找节点值等于给定值的节点并返回以该节点为根的子树若节点不存在则返回NULL。读完本文你将掌握 BST 有序性在搜索场景下的核心运用以及递归与迭代两种写法的实现细节、复杂度差异与边界处理并能在本地基于该仓库的题解体系完成调试与提交。一、题目描述与核心语义给定二叉搜索树BST的根节点和一个值需要在 BST 中找到节点值等于给定值的节点返回以该节点为根的子树如果节点不存在则返回NULL。例如给定如下二叉搜索树4 / \ 2 7 / \ 1 3当给定值2时应返回如下子树2 / \ 1 3而当给定值为5时由于树中不存在值为5的节点应返回NULL。题目本身不复杂但它精准地考察了「二叉搜索树BST有序性」这一最本质的性质任意节点的左子树中所有节点值都小于该节点值任意节点的右子树中所有节点值都大于该节点值左、右子树本身也分别是二叉搜索树。正是这条性质使得我们可以在每一层比较当前节点值与目标值从而决定只向一侧子树继续搜索而不是像普通二叉树那样必须同时遍历左右两侧。这也是本题被归类为「树的搜索」系列的原因在 Index/树的搜索.md 的索引表中本题与 235. 二叉搜索树的最近公共祖先、938. 二叉搜索树的范围和 等题目共同构成了利用树结构与有序性进行定向搜索的题组。二、解法一递归搜索原题解给出的递归实现非常精简class Solution { public TreeNode searchBST(TreeNode root, int val) { if (root null || root.val val) return root; return root.val val ? searchBST(root.right, val) : searchBST(root.left, val); } }这段代码只有三行却完整覆盖了递归搜索的全部逻辑逐行拆解如下递归出口终止条件if (root null || root.val val) return root;root null表示已经越过叶子节点仍未找到目标值此时按题意返回NULLJava 中即nullroot.val val表示当前节点就是目标节点直接返回以它为根的整棵子树注意不是只返回该节点而是返回整棵子树这一点恰好呼应了题目「返回以该节点为根的子树」的要求。定向下降分治选择return root.val val ? searchBST(root.right, val) : searchBST(root.left, val);若当前节点值小于目标值根据 BST 有序性目标只可能出现在右子树于是递归右子树否则当前节点值大于目标值目标只可能出现在左子树于是递归左子树。这里利用原函数自身作为递归函数、复用root作为搜索过程中的当前节点是一种非常典型的 BST 问题写法。同样的「复用原函数 依据节点值大小定向下降」思路在仓库中 235. 二叉搜索树的最近公共祖先 的 DFS 解法中也有体现——不过那道题需要根据p、q两节点与当前根节点的值大小关系分三种情况讨论而本题只需与单一目标值比较逻辑更为直接。复杂度分析递归版时间复杂度$O(n)$其中 $n$ 为二叉树节点数。最坏情况下 BST 退化为单链例如仅含左子树或右子树的斜树需要沿链一路搜到底空间复杂度$O(n)$最坏情况下递归深度等于树高即退化链的长度忽略递归本身带来的额外空间开销后复杂度同样为 $O(n)$。需要说明的是上述 $O(n)$ 是最坏情况下的界。在 BST 保持平衡树高 $h O(\log n)$时实际搜索开销为 $O(h)$即 $O(\log n)$。三、解法二迭代搜索「迭代」是「递归」的等价改写。由于搜索方向在每一层都由「当前节点值与目标值的大小关系」唯一确定天然是一条从根向下的单一路径因此完全可以用while循环替代系统调用栈class Solution { public TreeNode searchBST(TreeNode root, int val) { while (root ! null root.val ! val) { root root.val val ? root.right : root.left; } return root; } }逐行拆解循环条件while (root ! null root.val ! val)等价于递归版的终止条件取反——只要当前节点非空且值不等于目标值就继续向下走单步下降root root.val val ? root.right : root.left;将指针移动到右子树或左子树其余节点包括兄弟子树、父节点路径上的其他节点全部不需要访问退出循环后return root;——退出可能有两种原因要么root恰好为目标节点root.val val要么已经走到底仍未见目标root null。两种情况下直接返回root都恰好满足题意返回子树或NULL因此无需额外判断分支。复杂度分析迭代版时间复杂度$O(n)$最坏情况同递归版需沿退化链遍历至底空间复杂度$O(1)$仅使用常数级别的指针变量不依赖递归调用栈这是迭代版相对递归版的核心优势。当树的规模很大、递归深度可能接近栈上限例如退化为单链且节点数达到数万级时迭代版是更稳妥的选择而递归版胜在代码与思维模型一一对应、可读性更强。四、两种解法的对比与边界情况梳理维度递归解法迭代解法实现方式复用原函数系统栈保存上下文while循环 指针移动时间最坏$O(n)$$O(n)$空间最坏$O(n)$递归栈深度$O(1)$代码可读性与递归语义直接对应逻辑直观需理解循环不变量适用场景树高可控、追求简洁树高可能很大、避免栈溢出边界情况自查清单root为空树null两种写法都会直接返回null符合「节点不存在返回 NULL」的题意目标值即根节点值递归版命中root.val val直接返回根迭代版因循环条件root.val ! val不成立同样直接返回根目标值位于叶子节点搜索会沿路径下降到叶子节点后命中目标值不存在递归版会在越过叶子后因root null返回null迭代版会在指针变为null时退出循环返回null目标值大于所有节点或小于所有节点搜索只会沿着最右或最左的单链一路下降最终返回null。五、仓库中的延伸与进阶路径本题位于「树的搜索」知识簇的入口位置围绕它可以在当前仓库中继续串联以下进阶题目形成完整的学习路径Index/树的搜索.md该索引表收录了 74、99、108、109、173、235、236、331、653、589、590、671、700、778、783、872、897、938、993 等树的搜索类题目按难度与推荐指数 数量排序是系统刷「树的搜索」专题的导航地图LeetCode/231-240/235. 二叉搜索树的最近公共祖先中等.md同样利用 BST 有序性定向搜索但目标从「单个值」升级为「两个节点的最近公共祖先」需要按当前根节点值与两节点值的关系分情况讨论可对比体会 BST 定向下降思想的推广LeetCode/691-700/700. 二叉搜索树中的搜索简单.md本题原题解可直接对照本文查看原始表述与系列文章说明仓库中 LeetCode/671-680 目录下的 671二叉树中第二小的节点、LeetCode/921-930 目录下的 938二叉搜索树的范围和等题目也都能复用「递归 依据有序性剪枝」的思维模式。六、本地调试与提交建议根据仓库 README.md 的介绍这是一个「日更」的算法仓库每篇题解对应一道 LeetCode 原题。在本地验证本文代码时可以按以下步骤操作在任意支持 Java 的 IDE或 LeetCode 在线编辑器中将Solution类连同TreeNode定义一起粘贴按题目给定的root数组如[4,2,7,1,3]构造二叉搜索树注意数组中的null表示空位需要按层序建树分别调用递归版与迭代版searchBST用示例val 2验证返回子树为2 → 1, 3用val 5验证返回null补充自测用例空树root []、单节点树、退化为单链的 BST如[1,null,2,null,3]确认两种写法均不越界、不抛异常。总结LeetCode 700 虽然难度为简单却是理解「BST 有序性驱动定向搜索」这一核心思想的经典入口递归版以三行代码展示分治语义迭代版以 $O(1)$ 空间展示栈的等价消除。结合 LogicStack-LeetCode 仓库的 树的搜索索引 与 235 题解 等延伸内容读者可以以此为起点逐步掌握整棵二叉搜索树家族题目的统一思维框架。赞分享教程文档【免费下载链接】LogicStack-LeetCode公众号「宫水三叶的刷题日记」刷穿 LeetCode 系列文章源码项目地址https://gitcode.com/gh_mirrors/lo/LogicStack-LeetCode点击查看免费下载相关推荐LogicStack-LeetCode 刷穿 LeetCode938. 二叉搜索树的范围和简单——BST 中序遍历的递归与迭代双解法LogicStack LeetCode 刷穿 LeetCode938. 二叉搜索树的范围和简单——BST 中序遍历的递归与迭代双解法 本文是「宫水三叶的刷教程文档Docker 引擎插件全生命周期管理docker-py 的 client.plugins 实战指南Docker 引擎插件全生命周期管理docker py 的 client.plugins 实战指南 导读 Docker Engine 插件Plugin是扩教程文档LeetCode 235 二叉搜索树最近公共祖先LCA基于 BST 有序性的递归与迭代双解法详解LeetCode 235 二叉搜索树最近公共祖先LCA基于 BST 有序性的递归与迭代双解法详解 本篇文章聚焦 LeetCode 235「二叉搜索树的最近示例工程教程上一篇G-Helper终极指南华硕笔记本轻量级控制工具完全解析下一篇Scarab终极指南空洞骑士模组管理的完整教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Trae 里的 Codex 插件汉化:一行 patch 解锁中文界面

Trae 里的 Codex 插件汉化:一行 patch 解锁中文界面

Trae 里的 Codex 插件汉化:一行 patch 解锁中文界面 【免费下载链接】plugins OpenAI Plugins 项目地址: https://gitcode.com/GitHub_Trending/plugins123/plugins 把 Codex 装进 Trae,最让中文开发者难受的不是模型不够聪明,而是插件…

2026/10/10 14:02:45 阅读更多 →
【NebulaGraph】在设计图模型时,应该将属性放在点上还是边上?决策依据是什么?

【NebulaGraph】在设计图模型时,应该将属性放在点上还是边上?决策依据是什么?

NebulaGraph 图模型设计核心法则:属性归属点还是边的决策指南 用户问题原文:“在设计图模型时,应该将属性放在点上还是边上?决策依据是什么?” 本文将深入剖析这一图数据库建模的根本性问题。面向具备丰富大数据生态(Spring/Flink/ClickHouse/Hudi/Kafka)经验但初涉图数…

2026/10/10 14:01:43 阅读更多 →
AI Agent 面试题 120:LLM-as-Judge在多Agent系统中如何充当仲裁者?

AI Agent 面试题 120:LLM-as-Judge在多Agent系统中如何充当仲裁者?

🔥 AI Agent 面试题 120:LLM-as-Judge在多Agent系统中如何充当仲裁者?摘要:本文深入解析了「LLM-as-Judge在多Agent系统中如何充当仲裁者?」这一 AI Agent 领域的核心面试题。文章从 LLM-as-Judge 的基本概念出发&…

2026/10/10 14:01:43 阅读更多 →

最新新闻

本地部署 OpenResearch 的十个暗坑:依赖地狱、双栏 PDF 与扫描件

本地部署 OpenResearch 的十个暗坑:依赖地狱、双栏 PDF 与扫描件

本地部署 OpenResearch 的十个暗坑:依赖地狱、双栏 PDF 与扫描件 【免费下载链接】OpenResearch Turn your coding agents into research agents 项目地址: https://gitcode.com/GitHub_Trending/op/OpenResearch 把 coding agent 改造成 research agent&…

2026/10/10 15:41:18 阅读更多 →
Agent平台超时治理:端到端预算、线程池隔离与熔断降级实践

Agent平台超时治理:端到端预算、线程池隔离与熔断降级实践

做 Agent Platform 的人估计都体会过这种场景:线上一切平稳,突然某个下午告警群开始刷屏,用户说任务提交了半天没反应,你打开监控面板发现 P99 已经从平时的 300ms 直接飙到了 12 秒。我这次踩的就是典型的一例。表面上看是一个工…

2026/10/10 15:41:18 阅读更多 →
MAST-ML实战指南:材料结构到性能预测的本地化机器学习工作流

MAST-ML实战指南:材料结构到性能预测的本地化机器学习工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 15:41:18 阅读更多 →
基于PCA9422与STM32F427ZI的低功耗电源管理设计实战

基于PCA9422与STM32F427ZI的低功耗电源管理设计实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 15:41:18 阅读更多 →
PCA9422与PIC18F96J94协同实现工业级电源状态机管理

PCA9422与PIC18F96J94协同实现工业级电源状态机管理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 15:41:18 阅读更多 →
AnyPS5串流实战:跨平台远程游玩PS5的延迟优化与搭建指南

AnyPS5串流实战:跨平台远程游玩PS5的延迟优化与搭建指南

1. 从“AnyPS5”这个标题说起:它到底想解决什么问题第一次看到“AnyPS5”这个标题,我脑子里蹦出来的第一反应是:这大概率是一个围绕“跨平台游戏串流”或者“远程游玩”方向的项目。为什么这么判断?因为“Any”这个前缀在技术圈里…

2026/10/10 15:40:13 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →