剑指offer JZ33 二叉搜索树的后序遍历序列

描述

剑指offer JZ33 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。
数据范围: 节点数量 0≤n≤1000 ,节点上的值满足 1≤val≤105保证节点上的值各不相同
提示:
1.二叉搜索树是指父亲节点大于左子树中的全部节点,但是小于右子树中的全部节点的树。
2.该题我们约定空树不是二叉搜索树
3.后序遍历是指按照 “左子树-右子树-根节点” 的顺序遍历

方法:逆序遍历+栈

思路:
后序遍历的顺序是:左子树 —> 右子树 —> 根节点。那么其逆序便为:根节点 —> 右子树 —> 左子树。我们逆序遍历,如果是后一个节点大于前一个节点,说明后一个节点是前一个节点的右节点。并且我们每遍历一个节点就将其压入栈中。当我们发现后一个节点小于前一个节点,说明前一个节点没有右节点了,并且后一个节点是前一个节点(或者前一个节点的父节点)的左节点,那么我们就通过栈找到后一个节点的父节点,并且以后的节点都只能比这个节点小。
具体实现及注释:

import java.util.*;
public class Solution {public boolean VerifySquenceOfBST(int [] sequence) {int length = sequence.length;//空树不是二叉搜索树if (length == 0) return false;//实例化栈Deque<Integer> stack = new ArrayDeque<>();//初始化根节点,因为树中最大值为100000,所以初始化一个最大虚拟值,相当于把原树的根节点作为此虚拟节点的左节点。int rootValue = 100001;for (int i = length-1; i >= 0; i--) {int curValue = sequence[i];//因为rootValue存的是根节点的值,而curValue一定在其左子树,所以当curValue大于rootValue时,说明其不是二叉搜索树。if (curValue > rootValue) return false;//当curValue小于其前一个节点时,说明curValue不是其前一个节点的右节点,我们通过栈找到curValue的父节点,并更新rootValuewhile (!stack.isEmpty() && curValue < stack.peek()) {rootValue = stack.pop();}stack.push(curValue);}return true;}
}

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

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

相关文章

iOS 18.2 重磅更新:6个大动作

根据外媒报道&#xff0c;iOS 18.2迎来重磅更新&#xff0c;将带来6个大动作&#xff0c;这是一次非常实用的更新。不过要注意的是&#xff0c;其中涉及到AI的功能&#xff0c;国行iPhone 暂时还不可用&#xff0c;只能等审核通过了。 1&#xff0c;Safari下载进度 过去通过S…

《TCP/IP网络编程》学习笔记 | Chapter 9:套接字的多种可选项

《TCP/IP网络编程》学习笔记 | Chapter 9&#xff1a;套接字的多种可选项 《TCP/IP网络编程》学习笔记 | Chapter 9&#xff1a;套接字的多种可选项套接字可选项和 I/O 缓冲大小套接字多种可选项getsockopt & setsockoptSO_SNDBUF & SO_RCVBUF SO_REUSEADDR发生地址绑定…

高频 SQL 50 题(基础版)连接部分

1、使用唯一标识码替换员工ID # Write your MySQL query statement below SELECT b.unique_id, a.name FROM Employees as a LEFT JOIN EmployeeUNI as b ON a.id b.id;2、产品销售分析 I # Write your MySQL query statement below SELECTp.product_name, s.year, s.price …

D66【python 接口自动化学习】- python基础之数据库

day66 SQL-DQL-排序分页 学习日期&#xff1a;20241112 学习目标&#xff1a;MySQL数据库-- 135 SQL-DQL-排序分页 学习笔记&#xff1a; 结果查询 结果分页限制 总结 排序和分页限制的语法 2. 关键字总结&#xff1a;

CentOS AppStream 8 手动更新 yum源

由于CentOS 8的官方支持已在2021年12月31日结束&#xff0c;官方镜像中的CentOS 8包已被移除。因此&#xff0c;如果您仍然需要运行CentOS 8并更新其yum源&#xff0c;您可以考虑使用以下步骤来配置一个可用的yum源&#xff0c;例如阿里云的镜像源。 https://mirrors.aliyun.co…

Groovy有哪些官方文档和教程可以学习?

Groovy Language Documentation&#xff1a; 这是Groovy的官方文档&#xff0c;提供了详细的语言规范、教程和指南。您可以从这里下载JavaDoc和在线文档&#xff0c;以及获取关于如何开始使用Groovy的指导。[Groovy Language Documentation][1] Groovy官方教程&#xff1a; 官…

C 语言标准库 - <errno.h>

目录 1.errno 变量 2.宏 1.errno 变量 errno.h 声明了一个 int 类型的 errno 变量&#xff0c;用来存储错误码&#xff08;正整数&#xff09;。 如果这个变量有非零值&#xff0c;表示已经执行的程序发生了错误。 #include <errno.h> #include <stdio.h> #in…

LeetCode 3.无重复字符的最长子串

LeetCode 3.无重复字符的最长子串 思路&#x1f9d0;&#xff1a; 使用滑动窗口哈希表&#xff0c;哈希表映射每一个字符串&#xff0c;左右指针表示当前区间&#xff0c;当出现一个字符串那么就将哈希表1&#xff0c;右指针移动&#xff0c;当哈希表对应位置大于1时&#xff0…

验证码处理在自动化测试中的应用

在进行自动化测试时&#xff0c;处理验证码是一项常见的挑战&#xff0c;特别是图形验证码。每次刷新都会生成新的验证码&#xff0c;因此我们可以采用以下两种方法来获取验证码&#xff1a; 获取验证码图片链接&#xff1a;例如 src"http://example.com/getcaptcha/123&q…

【LeetCode】【算法】538. 把二叉搜索树转换为累加树

LeetCode 538. 把二叉搜索树转换为累加树 题目 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下…

云计算在智能交通系统中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 云计算在智能交通系统中的应用 云计算在智能交通系统中的应用 云计算在智能交通系统中的应用 引言 云计算概述 定义与原理 发展历…

全球碳循环数据集(2000-2023)包括总初级生产力、生态系统净碳交换和生态系统呼吸变量

全球碳循环数据集&#xff08;2000-2023&#xff09; 数据介绍 PFTs_XGB FLUX 是一个基于 XGBOOST 机器学习模型的全球碳循环数据集。该数据集通过对全球植被功能类型&#xff08;PFTs&#xff09;的分类&#xff0c;结合了 FLUXNET、AmeriFlux 和 ICOS 通量站点的现场观测数据…

Kafka经典面试题

1、kafka消息发送的流程&#xff1f; producer发送过程中启动两个线程 一个main线程 一个sender线程&#xff0c;在main线程中先创建一个双端队列&#xff08;RecordAccumlator、producerbatch&#xff09;&#xff0c;main将我们需要发送的东西经过拦截器&#xff0c;序列化&a…

【Vue】Vue3.0(二十四)Vue3.0中$refs 、$parent 的概念和使用场景

文章目录 一、 r e f s 和 refs和 refs和parent的概念及使用场景1. $refs概念及使用场景2. $parent概念及使用场景 二、代码解释Father.vueChild1.vueChild2.vue 三、新的例子CounterParent.vueCounterIncrement.vueCounterDecrement.vue 一、 r e f s 和 refs和 refs和parent的…

HTB:Photobomb[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行端口开放扫描 再次使用nmap对靶机开放端口进行脚本、服务扫描 使用ffuf进行简单的子域名扫描 使用浏览器直接访问该域名 选取一个照片进行下载&#xff0c;使用Yakit进行抓包 USER_FLAG&#xff1a;a9afd9220ae2b5731…

蓝桥杯c++算法学习【1】之枚举与模拟(卡片、回文日期、赢球票、既约分数:::非常典型的比刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 枚举与模拟 一、卡片&#xff1a; 【问题描述】 小蓝有很多数字卡片&#xff0c;每张卡片上都是一个数字&#xff08;0到9&#xff09;。 小蓝…

html页面中的内容替换,或改变某些字的颜色

1. html页面中的内容替换,或改变某些字的颜色 前端使用innnerHtml显示返回值+innerHtml文字显示两种不同的颜色(两部分显示颜色不一样) 1.1. html字符串改变某些字的颜色 需求:要文本框的字体部分改变颜色、大小、换行等功能。在了解需求后,文本框input发现完全满足不了现需…

Linux——简单认识vim、gcc以及make/Makefile

前言&#xff1a;大佬写博客给别人看&#xff0c;菜鸟写博客给自己看&#xff0c;我是菜鸟。 1、vim操作&#xff1a; 默认打开vim时&#xff0c;vim处于命令模式。(在其他模式中&#xff0c;Esc就能够返回命令模式) 常用的命令有&#xff1a; n gg&#xff1a;跳转到n行&…

C++基础(12.红黑树实现)

目录 红黑树的概念&#xff1a; 红黑树规则&#xff1a; 红黑树如何确保最长路径不超过最短路径的2倍的&#xff1f; 红黑树的效率&#xff1a; 红黑树的插入: 红黑树树插入⼀个值的大概过程: 情况1&#xff1a;变色 情况2&#xff1a;单旋变色&#xff1a; 情况3&…

智谱AI:ChatGLM强大的生成式语言模型

目录 智谱AI:ChatGLM强大的生成式语言模型 一、ChatGLM的定义与特点 二、ChatGLM的应用场景 三、举例说明 四、注意事项 智谱AI:ChatGLM强大的生成式语言模型 它通过对话的方式能够生成自然流畅的文本,这一特性使其在多个领域都有广泛的应用潜力,特别是在智能对话和智能…