news 2026/6/12 8:01:42

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 18:30:28

2026必备!10个降AI率平台推荐,千笔AI助你轻松应对论文查重难题

2026必备&#xff01;10个降AI率平台推荐&#xff0c;千笔AI助你轻松应对论文查重难题 AI降重工具&#xff1a;让论文更自然&#xff0c;让查重更轻松 在如今的学术写作中&#xff0c;AI生成内容已经成为了常见的辅助工具&#xff0c;但随之而来的AIGC率高、AI痕迹明显等问题…

作者头像 李华
网站建设 2026/6/10 10:49:06

对比一圈后,更贴合本科生的AI论文平台,千笔AI VS 学术猹

对比一圈后&#xff0c;更贴合本科生的AI论文平台&#xff0c;千笔AI VS 学术猹随着人工智能技术的迅猛迭代与普及&#xff0c;AI辅助写作工具已逐步渗透到高校学术写作场景中&#xff0c;成为本科生、研究生完成毕业论文不可或缺的辅助手段。越来越多面临毕业论文压力的学生&a…

作者头像 李华
网站建设 2026/6/11 3:29:59

【小程序毕设全套源码+文档】基于Android的酒店预订系统App的设计与实现小程序(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/4 16:48:41

光特通信40G光模块:好用的高速传输方案,适配各种需求

在数据中心密集连接、企业园区网络升级、工业极端环境部署这些场景里&#xff0c;40G光模块是保证数据高速传输的核心部件。光特通信作为全球光通信解决方案服务商&#xff0c;有20年的技术积累&#xff0c;打造了全系列40G光模块产品&#xff0c;涵盖普通环境、长距离、工业恶…

作者头像 李华
网站建设 2026/5/31 13:42:38

如何通过二维码提升健康宣教的效率?

二维码在健康宣教中发挥着日益重要的作用。通过这种技术&#xff0c;医院能以更高效的方式提供信息。患者只需用手机扫描二维码&#xff0c;即可快速获取相关健康知识和注意事项。这样一来&#xff0c;传统纸质资料的需求减少&#xff0c;医护人员的工作负担也显著降低。 首先…

作者头像 李华
网站建设 2026/6/10 20:10:58

AI产品经理转型指南:从技术人到AI大模型产品专家的进阶之路

本文介绍了AI产品经理的转型路径&#xff0c;分为专业型和应用型两类&#xff0c;适合不同背景人才。成功转型需掌握产品建设能力、行业理解、技术理解力和AI落地经验四大核心能力。针对转型困难&#xff0c;"人人都是产品经理&起点课堂"推出私教陪跑实战营&…

作者头像 李华