Leetcode会员尊享面试100题:255.验证二叉搜索树的前序遍历序列
给定一个无重复元素的整数数组preorder如果它是以二叉搜索树的先序遍历排列返回true。示例 1输入:preorder [5,2,1,3,6]输出:true示例 2输入:preorder [5,2,6,1,3]输出:false提示:1 preorder.length 1041 preorder[i] 104preorder中无重复元素进阶您能否使用恒定的空间复杂度来完成此题直接上代码不懂请留言或私信class Solution { public boolean verifyPreorder(int[] preorder) { if(preorder.length 1) { return true; } Info info getInfo(preorder, 0, preorder.length - 1); return info.isBST; } /**当前树的范围是startend计算这棵树的Info信息 */ public Info getInfo(int[] preorder, int start, int end) { if(start end) { /**根据二叉搜索树的定义如果只有一个节点就是 */ return new Info(preorder[start], preorder[start], true); } /**拿到root的值 */ int rootVal preorder[start]; /**现在我们还没有遍历不知道左右子树的情况就以自己考虑设置minValue、maxValue还有isBST */ int minValue rootVal; int maxValue rootVal; boolean isBST true; /**这种情况只有右子树 */ if(preorder[start 1] preorder[start]) { /**左子树为空我们不用做任何关于左子树的比较*/ Info info getInfo(preorder, start 1, end); /**统一写法*/ minValue Math.min(info.minValue, rootVal); maxValue Math.max(rootVal, info.maxValue); isBST info.isBST rootVal info.minValue; return new Info(minValue, maxValue, isBST); } else { /**有左子树找一下左子树的终点的下一个位置*/ int leftEndPost searchFirstG(preorder, start 1, end, rootVal); if(leftEndPost -1) { /**只有左子树剩下所有都是左子树的信息*/ Info info getInfo(preorder, start 1, end); minValue Math.min(info.minValue, rootVal); maxValue Math.max(rootVal, info.maxValue); isBST info.isBST rootVal info.maxValue; return new Info(minValue, maxValue, isBST); } else { /**左右子树都有需要获取两颗子树的信息左子树丛start1~leftEndPost-1,右子树从leftEndPostend */ Info leftInfo getInfo(preorder, start 1, leftEndPost - 1); Info rightInfo getInfo(preorder, leftEndPost, end); minValue Math.min(leftInfo.minValue, Math.min(rootVal, rightInfo.minValue)); maxValue Math.min(leftInfo.maxValue, Math.min(rootVal, rightInfo.maxValue)); /**这里需要左右子树都判断左子树最大值必须比rootVal小右子树最小值必须比rootVal大 */ isBST leftInfo.isBST rightInfo.isBST leftInfo.maxValue rootVal rightInfo.minValue rootVal; return new Info(minValue, maxValue, isBST); } } } /**获取第一个大于root值的元素使用二分查找*/ public int searchFirstG(int[] arr, int start, int end, int rootVal) { if(start end) { return -1; } /**先定义为-1如果没有查找到最后就是-1如果查找到了大雨rootVal的就更新成满足条件的最小的 */ int index -1; while(start end) { int mid start (end - start)/2; /**根据题意无重复元素所以这里直接判断大于就行一般的二分是需要写 */ if(arr[mid] rootVal) { /**找到了一个大于等于的但是这未必是最终的答案需要继续往小了找 */ index mid; end mid - 1; } else { /**范围错了如果有这个值肯定在前面 */ start mid 1; } } return index; } } /**根据二叉搜索树的特性根节点比它左子树的任何节点都大 比它右子树的任何节点都小并且左右子树都是二叉搜索树所以我们需要左右子树的以下信息最大值、最小值、是否为二叉搜索树*/ class Info{ int minValue; int maxValue; boolean isBST; public Info(int minValue, int maxValue, boolean isBST) { this.minValue minValue; this.maxValue maxValue; this.isBST isBST; } }运行结果

相关新闻

类型擦除的优雅实现:C++ <any> 全面深度解析与运行时多态实战指南

类型擦除的优雅实现:C++ <any> 全面深度解析与运行时多态实战指南

在强类型、静态编译的 C 世界中,安全地存储和操作任意类型的数据始终是一项挑战。传统方案如 void* 缺乏类型安全,union 仅限平凡类型,而继承体系(如 boost::any 的早期实现)又引入虚函数开销与设计耦合。为解决这一根…

2026/7/3 14:38:03 阅读更多 →
零基础学网安别囤课!3 个月从 HTTP 小白到安全运维拿 offer

零基础学网安别囤课!3 个月从 HTTP 小白到安全运维拿 offer

零基础学网安别囤课!3 个月速成路线:从 “HTTP 都不懂” 到 “拿安全运维 offer” “刷到‘100 天成为黑客’的课就买,囤了 5 个付费专栏、200G 资料,结果学了 1 个月,连 Burp Suite 怎么抓包都不会”—— 这是零基础学…

2026/7/3 14:38:07 阅读更多 →
[品牌实战] 拿公模货怎么做出“品牌感”?浅析如何用 AI 批量清洗工厂 Logo,低成本打造私有 Listing

[品牌实战] 拿公模货怎么做出“品牌感”?浅析如何用 AI 批量清洗工厂 Logo,低成本打造私有 Listing

品牌出海 Private Label 图像处理 AI工具 Inpainting Python应用 跨境电商前言在跨境电商(Amazon, Shopify, TikTok)的进阶之路上,从“卖货”转型为“卖品牌” 是必经之路。很多卖家选择从 1688 采购 白牌(White Label&#xff09…

2026/7/2 23:45:43 阅读更多 →

最新新闻

2026高考志愿填报必备资料包(专科+本科通用)

2026高考志愿填报必备资料包(专科+本科通用)

📚 核心资料清单(均为百度网盘链接) - 最新高职高专专业目录:https://pan.baidu.com/s/1msj12egrVRe8hfjW5d8g2A 提取码:t15p - 张雪峰志愿填报合集①:https://pan.baidu.com/s/1T7sDQ8s3KUJH3q9EIwEv-…

2026/7/3 17:58:06 阅读更多 →
GESP2026年6月认证C++六级( 第三部分编程题(1、条形蛋糕))精讲

GESP2026年6月认证C++六级( 第三部分编程题(1、条形蛋糕))精讲

🍰 第一幕:蛋糕王国来了一个新店长1、暑假到了。蛋糕王国里,新开了一家蛋糕店。每天早晨,师傅都会做好一整条长长的蛋糕。(1)例如今天做了一条:════════════════ 长度&#xff…

2026/7/3 17:58:06 阅读更多 →
自动整列机PLC控制系统验证方案设计与ALCOA+实现

自动整列机PLC控制系统验证方案设计与ALCOA+实现

在制药行业,计算机化系统验证(CSV)是设备合规投入生产的必要环节。对于产线后端的自动整列机(或称自动码盘机、整列收瓶机)而言,其PLC控制系统的验证需要覆盖硬件确认、软件功能测试、数据完整性验证等多个…

2026/7/3 17:56:05 阅读更多 →
中外大模型能力对比分析

中外大模型能力对比分析

中外大模型能力差距:结构性成因的深度分析属性说明文档版本v1.0撰写日期2026-07-02文档类型技术战略分析分析视角机制解释,而非榜单罗列 摘要 「国产大模型不如国外」是一个过于粗糙的命题。截至 2026 年上半年,斯坦福 HAI《AI Index 2026》指…

2026/7/3 17:52:04 阅读更多 →
GHelper:如何用开源工具彻底解放你的华硕笔记本性能潜力?

GHelper:如何用开源工具彻底解放你的华硕笔记本性能潜力?

GHelper:如何用开源工具彻底解放你的华硕笔记本性能潜力? 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivoboo…

2026/7/3 17:52:04 阅读更多 →
LENA-R8与PIC18LF45K40的嵌入式通信与精确定位方案

LENA-R8与PIC18LF45K40的嵌入式通信与精确定位方案

1. LENA-R8与PIC18LF45K40的硬件组合解析这个组合的核心价值在于将蜂窝通信与精确定位能力集成到嵌入式系统中。LENA-R8是u-blox推出的多模LTE Cat 1模块,支持14个LTE频段和4个GSM/GPRS频段,这意味着它能在全球绝大多数地区实现网络连接。其内置的u-blox…

2026/7/3 17:52:04 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻