当前位置: 首页 > news >正文

面试题 33. 二叉搜索树的后序遍历序列

二叉搜索树的后序遍历序列

  • 题目描述
    • 示例
  • 题解
    • 递归
    • 单调栈

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。

示例

参考以下这颗二叉搜索树:

     5/ \2   6/ \1   3

输入: [1,6,3,2,5]
输出: false
示例 2:
输入: [1,3,2,6,5]
输出: true

题解

递归

后序遍历的最后一个元素为根节点,根据二叉搜索树的性质,根节点左边的元素都小于根节点,根节点右边的元素都大于根节点。因此,我们找到第一个大于根节点的位置 𝑖,那么 𝑖
右边的元素都应该大于根节点,否则返回 false。然后递归判断左右子树。

class Solution {
public:bool verifyPostorder(vector<int>& postorder) {function<bool(int, int)> dfs = [&](int l, int r) -> bool {if (l >= r) {return true;}int v = postorder[r];int i = l;while (i < r && postorder[i] < v) {++i;}for (int j = i; j < r; ++j) {if (postorder[j] < v) {return false;}}return dfs(l, i - 1) && dfs(i, r - 1);};return dfs(0, postorder.size() - 1);}
};

单调栈

后序遍历的顺序为“左、右、根”,如果从右往左遍历数组,那么顺序就变成“根、右、左”,根据二叉搜索树的性质,右子树所有节点值均大于根节点值。

因此,从右往左遍历数组,就是从根节点往右子树走,此时值逐渐变大,直到遇到一个递减的节点,此时的节点应该属于左子树节点。我们找到该节点的直接父节点,那么此后其它节点都应该小于该父节点,否则返回 false。然后继续遍历,直到遍历完整个数组。

此过程借助栈来实现,具体步骤如下:

  1. 首先初始化一个无穷大的父节点值 𝑚𝑥,然后初始化一个空栈。
  2. 接下来,从右往左遍历数组,对于每个遍历到的元素 𝑥
    • 如果 𝑥大于 𝑚𝑥,说明当前节点不满足二叉搜索树的性质,返回 false。
    • 否则,如果当前栈不为空,且栈顶元素大于 𝑥,说明当前节点为左子树节点,循环将栈顶元素出栈并赋值给 𝑚𝑥,直到栈为空或者栈顶元素小于等于 𝑥,然后将 𝑥入栈。
      遍历结束后,返回 true。
class Solution {
public:bool verifyPostorder(vector<int>& postorder) {stack<int> stk;int mx = 1 << 30;reverse(postorder.begin(), postorder.end());for (int& x : postorder) {if (x > mx) {return false;}while (!stk.empty() && stk.top() > x) {mx = stk.top();stk.pop();}stk.push(x);}return true;}
};

相关文章:

面试题 33. 二叉搜索树的后序遍历序列

二叉搜索树的后序遍历序列 题目描述示例 题解递归单调栈 题目描述 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true&#xff0c;否则返回 false。假设输入的数组的任意两个数字都互不相同。 示例 参考以下这颗二叉搜索树&#…...

Web响应式设计———1、Grid布局

1、网格布局 Grid布局 流动网格布局是响应式设计的基础。它通过使用百分比而不是固定像素来定义网格和元素的宽度。这样&#xff0c;页面上的元素可以根据屏幕宽度自动调整大小&#xff0c;适应不同设备和分辨率。 <!DOCTYPE html> <html lang"en"> &l…...

ESP32开发进阶: 训练神经网络

一、网络设定 我们设定一个简单的前馈神经网络&#xff0c;其结构如下&#xff1a; 输入层&#xff1a;节点数&#xff1a;2&#xff0c;接收输入数据&#xff0c;每个输入样本包含2个特征&#xff0c;例如 {1.0, 0.0}, {0.0, 1.0} 等。 隐藏层&#xff1a;节点数&#xff1a;…...

全国区块链职业技能大赛国赛考题前端功能开发

任务3-1:区块链应用前端功能开发 1.请基于前端系统的开发模板,在登录组件login.js、组件管理文件components.js中添加对应的逻辑代码,实现对前端的角色选择功能,并测试功能完整性,示例页面如下: 具体要求如下: (1)有明确的提示,提示用户选择角色; (2)用户可看…...

直接插入排序算法详解

直接插入排序&#xff08;Straight Insertion Sort&#xff09;是一种简单直观的排序算法。它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。插入排序在实现上&#xff0c;通常采用in-place排…...

sql手动自增id

有时候在运维处理数据的时候&#xff0c;需要给某张表插入新的记录&#xff0c;那么需要知道最新插入数据的id,并在最新id的基础上加上id增长步长获取新的id,这个过程往往需要现将max出来加1,再手动补充到sql语句中&#xff0c;很麻烦&#xff0c;而且数据多的时候容易出错。有…...

10_TypeScript中的泛型

TypeScript中的泛型&#xff09; 一、泛型的定义二、泛型函数三、泛型类&#xff1a;比如有个最小堆算法&#xff0c;需要同时支持返回数字和字符串两种类型。通过类的泛型来实现四、泛型接口五、泛型类 --扩展 把类作为参数类型的泛型类1、实现&#xff1a;定义一个 User 的类…...

Unity3D之TextMeshPro使用

文章目录 1. TextMeshPro简介2. TextMeshPro创建3. TextMeshPro脚本中调用4. TextMeshPro字体设置及中文支持过程中出现的一些问题 1. TextMeshPro简介 【官网文档】https://docs.unity.cn/cn/2020.3/Manual/com.unity.textmeshpro.html TextMeshPro 是 Unity 的最终文本解决…...

K8S 上部署 Prometheus + Grafana

文章目录 一、使用 Helm 安装 Prometheus1. 配置源2. 下载 prometheus 包3. 安装 prometheus4. 卸载 二、使用 Helm 安装 Grafana1. 配置源2. 安装 grafana3. 访问4. 卸载 一、使用 Helm 安装 Prometheus 1. 配置源 地址&#xff1a;https://artifacthub.io/packages/helm/pro…...

雷军的逆天改命与顺势而为

雷军年度演讲前&#xff0c;朋友李翔提了一个问题&#xff1a;雷军造车是属于顺势而为还是逆势而为&#xff1f;评论互动区有一个总结&#xff0c;很有意思&#xff0c;叫“顺势逆袭”。 大致意思是产业趋势下小米从手机到IOT再切入汽车&#xff0c;是战略的必然&#xff0c;不…...

Leetcode 11. 盛最多水的容器

Leetcode 11. 盛最多水的容器 Leetcode 11. 盛最多水的容器 一、题目描述二、我的想法 一、题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成…...

Java笔试分享

1、设计模式&#xff08;写>3种常用的设计模式&#xff09; 设计模式是在软件工程中解决常见问题的经验性解决方案。以下是一些常用的设计模式&#xff1a; 单例模式&#xff08;Singleton&#xff09;&#xff1a; 意图&#xff1a;确保一个类只有一个实例&#xff0c;并…...

LeetCode:对称的二叉树(C语言)

1、问题概述&#xff1a;给一个二叉树&#xff0c;看是否按轴对称 2、示例 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 3、分析 &#xff08;1&a…...

Postman中的API Schema验证:确保响应精准无误

Postman中的API Schema验证&#xff1a;确保响应精准无误 在API开发和测试过程中&#xff0c;验证响应数据的准确性和一致性是至关重要的。Postman提供了一个强大的功能——API Schema验证&#xff0c;它允许开发者根据预定义的JSON Schema来检查API响应。本文将详细介绍如何在…...

深入浅出WebRTC—GCC

GoogCcNetworkController 是 GCC 的控制中心&#xff0c;它由 RtpTransportControllerSend 通过定时器和 TransportFeedback 来驱动。GoogCcNetworkController 不断更新内部各个组件的状态&#xff0c;并协调组件之间相互配合&#xff0c;向外输出目标码率等重要参数&#xff0…...

leetcode日记(49)旋转链表

其实不难&#xff0c;就是根据kk%len判断需要旋转的位置&#xff0c;再将后半段接在前半段前面就行。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : …...

InteliJ IDEA最新2024版下载安装与快速配置激活使用教程+jdk下载配置

第一步&#xff1a;下载ideaIC-2024.1.4 方法1&#xff1a;在线链接 IntelliJ IDEA – the Leading Java and Kotlin IDE (jetbrains.com) 选择社区版进行下载 方法2&#xff1a;百度网盘 链接&#xff1a;https://pan.baidu.com/s/1ydS6krUX6eE_AdW4uGV_6w?pwdsbfm 提取…...

【23】Android高级知识之Window(四) - ThreadedRenderer

一、概述 在上一篇文章中已经讲了setView整个流程中&#xff0c;最开始的addToDisplay和WMS跨进程通信的整个过程做了什么。继文章Android基础知识之Window(二)&#xff0c;这算是另外一个分支了&#xff0c;接着讲分析在performTraversals的三个操作中&#xff0c;最后触发pe…...

Java-根据前缀-日期-数字-生成流水号(不重复)

&#x1f388;边走、边悟&#x1f388;迟早会好 小伙伴们在日常开发时可能会遇到的业务-生成流水号&#xff0c;在企业中可以说是比较常见的需求&#xff0c; 可以采用"前缀日期数字"的方式&#xff08;ps:此方式是需要用到缓存的&#xff09;前缀&#xff1a;为了…...

跟李沐学AI:卷积层

从全连接层到卷积 多层感知机十分适合处理表格数据&#xff0c;其中行对应样本&#xff0c;列对应特征。但对于图片等数据&#xff0c;全连接层会导致参数过多。卷积神经网络&#xff08;convolutional neural networks&#xff0c;CNN&#xff09;是机器学习利用自然图像中一…...

Qwen3.5-4B-Claude-Opus惊艳效果:编译原理词法分析器状态转换图生成

Qwen3.5-4B-Claude-Opus惊艳效果&#xff1a;编译原理词法分析器状态转换图生成 1. 模型能力展示&#xff1a;从代码到状态转换图 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF模型在编译原理领域展现了令人惊艳的代码理解与可视化能力。当输入词法分析器代码时&…...

SecGPT-14B案例分享:某能源企业OT网络异常通信行为识别过程

SecGPT-14B案例分享&#xff1a;某能源企业OT网络异常通信行为识别过程 1. 引言&#xff1a;当能源网络遭遇“隐形”威胁 想象一下&#xff0c;一家大型能源企业的工业控制系统&#xff08;OT网络&#xff09;正在平稳运行&#xff0c;控制着发电、输电的关键设备。突然&…...

解决Redis测试环境搭建难题的try.redis工具:零配置交互式终端功能全解析

解决Redis测试环境搭建难题的try.redis工具&#xff1a;零配置交互式终端功能全解析 【免费下载链接】try.redis A demonstration of the Redis database. 项目地址: https://gitcode.com/gh_mirrors/tr/try.redis 在日常开发中&#xff0c;开发者常常面临Redis测试环境…...

LiuJuan Z-Image Generator参数详解:CFG Scale=2.0与12步生成高质量人像

LiuJuan Z-Image Generator参数详解&#xff1a;CFG Scale2.0与12步生成高质量人像 想用AI生成一张惊艳的人像照片&#xff0c;却发现要么细节模糊&#xff0c;要么风格怪异&#xff0c;怎么调参数都达不到理想效果&#xff1f;如果你也遇到过类似问题&#xff0c;那今天这篇文…...

避坑指南:S-Function参数传递中mxArray操作的3个典型错误

S-Function开发实战&#xff1a;mxArray参数传递的3大陷阱与防御性编程技巧 在Simulink的S-Function开发中&#xff0c;mxArray作为MATLAB与C/C之间的数据桥梁&#xff0c;其正确操作直接关系到模块的稳定性和可靠性。许多开发者在参数传递环节频繁遭遇段错误、内存泄漏和类型误…...

StructBERT-Large中文相似度工具一文详解:三级匹配等级判定逻辑与业务适配建议

StructBERT-Large中文相似度工具一文详解&#xff1a;三级匹配等级判定逻辑与业务适配建议 本文深度解析StructBERT-Large中文相似度工具的核心匹配逻辑&#xff0c;提供实际业务场景中的适配建议和优化方案 1. 工具核心价值与适用场景 StructBERT-Large中文相似度工具是一个基…...

力扣高频经典双题解:接雨水 + 无重复最长子串(思路 + 满分代码)

接雨水、无重复字符最长子串是面试高频、算法入门必刷的经典题&#xff0c;一道考动态规划预处理&#xff0c;一道考滑动窗口&#xff0c;都是数组 / 字符串题型里的核心套路。本篇把两道题的思路讲透、代码写清&#xff0c;新手也能一遍看懂&#xff0c;刷题效率直接拉满&…...

为什么顶尖量化团队已弃用Pandas清洗?Polars 2.0零拷贝字符串正则+Unicode归一化实战(附GitHub千星Benchmark)

第一章&#xff1a;Polars 2.0 大规模数据清洗技巧 2026 最新趋势 Polars 2.0 在 2026 年已全面支持零拷贝流式清洗、原生 Delta Lake 元数据感知与分布式列式校验&#xff0c;成为金融、遥感与实时日志场景中替代 Pandas 的首选引擎。其核心突破在于 LazyFrame 的智能物化策略…...

The Dark Art of Low-Light Enhancement: Why Retinex Models Don’t Need Handcrafted Priors Anymore

无先验约束的Retinex模型&#xff1a;PairLIE如何重塑低光增强技术范式 1. 低光增强的技术演进与当前挑战 在计算摄影领域&#xff0c;低光图像增强&#xff08;Low-light Image Enhancement, LIE&#xff09;一直是核心难题之一。传统方法主要依赖手工设计的先验知识&#xff…...

从Flask裸奔到MCP标准落地:7步迁移指南+自动转换脚本(已验证支撑日均50万次Agent调用)

第一章&#xff1a;Python MCP 服务器开发模板概览与核心价值Python MCP&#xff08;Model-Controller-Protocol&#xff09;服务器开发模板是一套面向协议驱动微服务架构的轻量级开发框架&#xff0c;专为快速构建符合 MCP 规范的 AI 工具集成后端而设计。它抽象了协议适配、会…...