news 2026/6/11 2:38:39

Leetcode会员尊享面试100题:255.验证二叉搜索树的前序遍历序列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Leetcode会员尊享面试100题:255.验证二叉搜索树的前序遍历序列

给定一个无重复元素的整数数组preorder如果它是以二叉搜索树的先序遍历排列,返回true

示例 1:

输入:preorder = [5,2,1,3,6]输出:true

示例 2:

输入:preorder = [5,2,6,1,3]输出:false

提示:

  • 1 <= preorder.length <= 104
  • 1 <= preorder[i] <= 104
  • preorder无重复元素

进阶:您能否使用恒定的空间复杂度来完成此题?

直接上代码,不懂请留言或私信

class Solution { public boolean verifyPreorder(int[] preorder) { if(preorder.length == 1) { return true; } Info info = getInfo(preorder, 0, preorder.length - 1); return info.isBST; } /**当前树的范围是start~end,计算这棵树的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 { /**左右子树都有,需要获取两颗子树的信息,左子树丛start+1~leftEndPost-1,右子树从leftEndPost~end */ 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; } }

运行结果:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:15:06

微信小程序 - 详解苹果ios手机请求不到数据访问不了接口,但安卓却可以正常访问。wx.request苹果手机IOS请求失败、安卓可以请求成功(微信小程序上线后苹果手机不能访问接口,网络请求失败排查)

描述说明 uniapp开发微信小程序项目,同样可以完美解决! 微信小程序安卓正常但苹果ios手机调接口显示网络请求失败,小程序发布上线之后苹果手机wx.request获取不到数据但安卓手机却正常访问接口,总的来说就是【微信小程序IOS访问不了接口,安卓可以正常访问】如果你各种地方…

作者头像 李华
网站建设 2026/6/10 13:32:25

基于MATLAB的雾天图像清晰化研究

基于MATLAB的雾天图像清晰化研究 第一章 绪论 雾天图像因大气散射效应存在对比度降低、细节模糊、色彩失真等问题&#xff0c;严重影响交通监控、安防巡检、自动驾驶等视觉系统的可靠性。传统雾天图像增强方法&#xff08;如直方图均衡化&#xff09;仅从灰度层面调整&#xff…

作者头像 李华
网站建设 2026/6/10 14:19:28

基于MATLAB的四自由度SCARA机器人的轨迹规划与仿真

基于MATLAB的四自由度SCARA机器人的轨迹规划与仿真 第一章 绪论 SCARA机器人因结构紧凑、重复定位精度高、运动速度快的特点&#xff0c;广泛应用于电子装配、物料搬运、精密焊接等工业场景&#xff0c;四自由度SCARA机器人更是兼顾平面运动与垂直方向操作的核心构型。传统SCAR…

作者头像 李华
网站建设 2026/6/10 12:25:46

为什么 Webpack 要打包?从 HTTP/1.1 限制到 HTTP/2 多路复用原理详解

从 Webpack 打包策略看 HTTP 协议的演进&#xff1a;从 1.1 的串行到 2.0 的多路复用 前言 在前端开发中&#xff0c;我们习惯于使用 Webpack 将成百上千个模块打成少数几个 Bundle。这种行为的初衷并非仅仅为了模块化&#xff0c;而是为了规避 HTTP/1.1 协议下的性能瓶颈。本…

作者头像 李华
网站建设 2026/6/10 0:18:15

白帽大佬为何偏爱挖逻辑漏洞?附真实案例解析

很多圈内知名大佬&#xff0c;他们战绩不凡&#xff0c;赫赫有名&#xff0c;在各大SRC排行榜常年霸屏。 为什么大佬们都爱挖逻辑漏洞 我们对比分析了逻辑漏洞的特点&#xff0c;逻辑漏洞的类型及不同类型的案例解析&#xff0c;对挖洞感兴趣的师傅们不要错过呦~ 现在的安全设…

作者头像 李华
网站建设 2026/6/10 12:37:34

昆山国力电子三大核心电真空器件:构筑可控核聚变的能量调控体系

核聚变&#xff0c;本质上是轻质量元素的原子核在极高温度和压力条件下&#xff0c;聚合形成较重原子核的核反应过程。可控核聚变作为人类能源问题的终极解决方案&#xff0c;其技术实现面临着前所未有的工程挑战。国力电子凭借深耕电真空器件领域的技术积淀&#xff0c;其研发…

作者头像 李华