【C/C++】BST树的后序遍历

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

参考以下这颗二叉搜索树:
     5
    / \
   2   6
  / \
 1   3

示例 1:

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

示例 2:

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

#include <iostream>
#include <vector>
using namespace std;class Solution {
public:// 入口函数,判断输入的整数数组是否是某二叉搜索树的后序遍历结果bool verifyPostorder(vector<int>& postorder) {// 调用辅助函数 verifyPostorderHelper,传入整数数组、数组起始位置和结束位置return verifyPostorderHelper(postorder, 0, postorder.size() - 1);}// 辅助函数,用于递归检查数组是否满足二叉搜索树的后序遍历结果bool verifyPostorderHelper(vector<int>& postorder, int start, int end) {// 当起始位置大于等于结束位置时,表示只有一个节点或者空树,必然满足条件,返回 trueif (start >= end) return true;// 获取根节点的值,根节点位于数组末尾int root = postorder[end];int i = start;// 在数组中找到左子树的区间,左子树的所有节点值都小于根节点while (postorder[i] < root) ++i;int j = i;// 在数组中找到右子树的区间,右子树的所有节点值都大于根节点while (postorder[j] > root) ++j;// 如果 j 不等于 end,说明右子树部分有小于根节点的值,不符合二叉搜索树的性质,返回 falseif (j != end) return false;// 递归检查左右子树是否都满足二叉搜索树的后序遍历结果// 左子树的区间为 [start, i-1],右子树的区间为 [i, end-1]return verifyPostorderHelper(postorder, start, i - 1) && verifyPostorderHelper(postorder, i, end - 1);}
};int main() {// 示例输入数据vector<int> postorder1 = {1, 6, 3, 2, 5};Solution sol;// 输出第一个示例的结果cout << "Example 1: " << boolalpha << sol.verifyPostorder(postorder1) << endl; // 输出 false// 示例输入数据vector<int> postorder2 = {1, 3, 2, 6, 5};// 输出第二个示例的结果cout << "Example 2: " << boolalpha << sol.verifyPostorder(postorder2) << endl; // 输出 truereturn 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/789487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IPKISS ------ 导入 Lumerical S-matrix 仿真结果

IPKISS ------ 导入 Lumerical S-matrix 仿真结果 引言引言 这里给大家介绍一下如何使用 IPKISS 导入 Lumerical 中器件 S Matrix 的仿真结果。 import ipkiss3.all as i3 import matplotlib.pyplot as plt import numpy as nps_matrix = i3.device_sim.satrix1swep.from_tou…

[ RV1108_LINUX] 关于如何调整cpu中vdd_core的电压

问题描述 通过rv1108.dtsi调整其中dvfs节点下pd_core和pd_ddr对应频率的电压。发现修改后电压并没有改变&#xff0c;一直为11.25v。尝试了将pd_core下的operating-points中的1008000 1150000修改为1008000 1200000&#xff0c;也无作用。将operating-points中频率是留一个&am…

49. QT中的HTTP通信与JSON数据格式解析

1. 说明 最近参考B站以为博主的视频视频链接学习了一些在QT当中利用HTTP访问网页数据的相关知识,在此记录一下。在访问网页的时候主要用到的接口类包括:QNetworkAccessManager、QNetworkReply、QNetworkRequest,因为大部分网页数据都是以 JSON 格式保存的,所以在获取到网页…

Spring Boot Actuator

概述 Spring Boot Actuator是Spring Boot的一个功能模块&#xff0c;用于提供生产环境中常见的监控和管理功能。它提供了各种端点&#xff08;endpoints&#xff09;&#xff0c;可以用于监视应用程序的运行状况、收集应用程序的指标数据以及与应用程序进行交互。 以下是Spri…

Oracle基础-PL/SQL编程 备份

1、PL/SQL简介 PL/SQL块结构 约定&#xff1a;为了方便&#xff0c;本文后面把PL/SQL简称PL。 PL程序都是以块&#xff08;BLOCK&#xff09;为基本单位&#xff0c;整个PL块分三部分&#xff1a;声明部分&#xff08;使用DECLARE开头&#xff09;、执行部分(以BEGIN开头)和异…

数字人视频合成平台推荐

数字人讲解视频和全景作品的结合是一种全新的数字交互方式&#xff0c;可为用户提供更加直观和具有沉浸感的内容展示和交互体验&#xff0c;从而适用于诸如旅游、展览、博物馆、教育培训、泛房地产、以及娱乐和文化等应用场景。 当前数字人合成视频技术已经发展至日益成熟的阶…

Redission--分布式锁

Redission的锁的好处 Redission分布式锁的底层是setnx和lua脚本(保证原子性) 1.是可重入锁。 2.Redisson 锁支持自动续期功能&#xff0c;这可以帮助我们合理控制分布式锁的有效时长&#xff0c;当业务逻辑执行时间超出了锁的过期时间&#xff0c;锁会自动续期&#xff0c;避免…

学术论文写作

学术论文写作 摘自复旦张军平老师的书籍&#xff1a;高质量读研&#xff1a;教你如何写论文、做科研 标题 标题&#xff1a;1.明确研究内容&#xff1b;2.吸引眼球 摘要 字数&#xff1a;期刊&#xff08;300字左右&#xff09;、会议&#xff08;150字左右&#xff09;、毕…

python之while循环

while 循环是一种前测试循环结构&#xff0c;意味着在每次循环开始时先检查条件是否为真&#xff0c;如果为真&#xff0c;则执行循环体中的代码&#xff0c;然后再次检查条件。只有当条件为假时&#xff0c;循环才会终止。 通过结合实际问题和 while 循环&#xff0c;我们可以…

SSL通配符证书怎么选?看这里

通配符证书&#xff0c;作为一种特殊的数字证书类型&#xff0c;以其独特的优势在网络安全领域扮演着重要角色。相较于传统的单一域名证书&#xff0c;通配符证书能够为同一主域名下的所有子域名提供安全保护&#xff0c;显著提升管理效率&#xff0c;简化证书部署流程&#xf…

LandCover数据介绍与下载

一、LC介绍 土地覆盖&#xff08;Land Cover&#xff0c;LC&#xff09;是自然营造物和人工建筑物所覆盖的地表诸多要素的综合体。土地覆盖指地表所属的植被覆盖物(森林、草原、耕作植被等)或非植被覆盖物(冰雪、建筑物等)的具体类型&#xff0c;侧重描述地球表面的自然属性&a…

02 - 全加器和加法器

---- 整理自B站UP主 踌躇月光 的视频 1. 全加器 用门电路实现两个二进制数相加并求出和的组合线路&#xff0c;称为一位全加器。一位全加器可以处理低位进位&#xff0c;并输出本位加法进位。全加器比半加器多了一位进位。 1.1 实验 1&#xff1a;通过两个半加器设计全加器 1.…

IDEA无法连接虚拟机中的Redis的解决方案,无法连接Jedis,无法ping通虚拟机的解决方案

首先&#xff0c;笔者先说明一下自身的情况&#xff0c;怎么连接都连不上&#xff0c;网上的教程全部都看了一遍&#xff0c;基本上没用得上的&#xff0c;这篇文章里面的解决方案包括了笔者能在网上找到了最全面的办法总结&#xff0c;最后终于是连上了 目录 一.连接Jedis出错…

Linux初学(十一)中间件

一、web服务 1.1 中间件简介 中间件其实就是一类软件&#xff0c;中间件的作用是让用户可以看到一个网页 总结&#xff1a;客户端可以向服务端发送请求&#xff0c;服务器端会通过中间件程序来接收请求&#xff0c;然后处理请求&#xff0c;最后将处理结果返回给客户端 1.2 中…

自动驾驶的世界模型:综述

自动驾驶的世界模型&#xff1a;综述 附赠自动驾驶学习资料和量产经验&#xff1a;链接 24年3月澳门大学和夏威夷大学的论文“World Models for Autonomous Driving: An Initial Survey”。 在快速发展的自动驾驶领域&#xff0c;准确预测未来事件并评估其影响的能力对安全性…

SQL面试题(1)连续登陆问题

​ 轻松一点&#xff0c;写一些SQL面试题系列&#xff0c;今天从连续登陆问题开始。连续登陆无疑是数据开发面试高频面试题&#xff0c;但遇到本人面试可能并不会出现这个面试题&#xff0c;一般我会根据实际开发场景出具SQL场景题目&#xff0c;且会设计成从浅入深考察应聘者的…

C++ 2024-4-2 作业

1.模板类实现顺序栈 #include <iostream> #define MAX 8 using namespace std; template<typename T> class stack {T data[MAX];int top; public:stack():top(-1){}bool empty_stack();bool full_stack();void push_stack(T data);void pop_stack();void show();…

OpenMLDB vs Redis 内存占用量测试报告

1. 背景 OpenMLDB 是一款开源的高性能全内存 SQL 数据库&#xff0c;在时序数据存储、实时特征计算等方面都有很多创新和优化。Redis 是业界最流行的内存存储数据库&#xff0c;广泛应用于缓存等高性能在线场景。虽然二者应用场景不尽相同&#xff0c;但作为都是使用内存作为存…

docker容器之etcd安装

一、etcd介绍 1、etcd是什么 etcd是CoreOS团队于2013年6月发起的开源项目&#xff0c;它的目标是构建一个高可用的分布式键值(key-value)数据库。 2、etcd特点 简单的接口&#xff0c;通过标准的HTTP API进行调用&#xff0c;也可以使用官方提供的 etcdctl 操作存储的数据。…

使用Vue实现CSS过渡和动画

01-初识动画和过渡 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>使用vue实现css过渡和动画&l…