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

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

文章目录

  • 一、题目描述
  • 二、示例
  • 三、主要思路

一、题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。
提示:
1.二叉搜索树是指父亲节点大于左子树中的全部节点,但是小于右子树中的全部节点的树。
2.该题我们约定空树不是二叉搜索树
3.后序遍历是指按照 “左子树-右子树-根节点” 的顺序遍历

二、示例

示例一:
输入:[1,3,2]
返回值:true

在这里插入图片描述

示例二:
输入:[3,1,2]
返回值:false

示例三:
输入:[5,7,6,9,11,10,8]
返回值:true

三、主要思路

这道题可以用分治的思想来解决,首先我们要找到这棵二叉搜索树的根节点,由于给出的序列是后序遍历序列,所以序列的最后一个元素一定就是根节点。

二叉搜索树的特性是左子树所有节点的值一定比根节点的值小,右子树所有节点的值一定比根节点的值大,题目说明了序列中不存在两个重复的数字。

所以我们要做的是两步:确定序列中的左子树区间和右子树区间、检测区间内的值是否符合规定。

首先是确定序列中左子树的区间,我们从左到右遍历序列,如果当前的值比根节点的值小,则继续遍历,直到出现第一个比根节点大的值时,我们就能够确定下左子树的区间范围了。

然后从第一个比根节点大的值开始,按理说往后一定是右子树区间,也就是说往后的值一定都比根节点的值大,否则,就说明这不是符合规定的序列。因此,我们需要检测右子树区间是否符合规定,当发现存在一个比根节点小的值时,就可以直接返回false了。

如果右子树区间也没有问题,那就继续将左右子树区间当成一个新的序列划分,将问题规模变小,当划分成不可分割的子问题时,如果所有区间都符合规定,则证明该序列是正确的二叉搜索树后序遍历序列。

class Solution {
public:bool _VerifySquenceOfBST(vector<int> a, int start, int end){if(start >= end){return true;}// 后序遍历,数组的最后一个元素一定是根节点int root = a[end];// 确定根节点的左子树区间范围int i = start;while(i < end && a[i] < root){i++;}// 检测i往后的值是否都是大于rootfor(int j = i; j < end; j++){if(a[j] < root){return false;}}// 走到这里,说明区间检测正确,继续分治检测return _VerifySquenceOfBST(a, start, i - 1) && _VerifySquenceOfBST(a, i, end - 1);}bool VerifySquenceOfBST(vector<int> sequence) {if(sequence.empty()){return false;}return _VerifySquenceOfBST(sequence, 0, sequence.size() - 1);}
};
http://www.lryc.cn/news/44397.html

相关文章:

  • 研究fastdds v2.8.0 1之 基础模块
  • ElasticSearch系列 - SpringBoot整合ES:精确值查询 term
  • 关于async/await、promise和setTimeout执行顺序
  • 2023-03-31:如何计算字符串中不同的非空回文子序列个数?
  • D. The Number of Imposters(二分图染色)
  • 图片太大怎么改小kb?简单的图片压缩方法分享
  • 【python-leecode刷题】动态规划类问题----以53. 最大子数组和为例
  • Idea常用快捷键设置
  • 【新2023Q2模拟题JAVA】华为OD机试 - 分苹果
  • 【博学谷学习记录】超强总结,用心分享丨人工智能 自然语言处理 BERT、GPT、ELMO对比学习简记
  • 【嵌入式Bluetooth应用开发笔记】第四篇:初探蓝牙HOST及应用开发(持续更新ing)
  • GORM 基础 -- CRUD 接口
  • 为什么0代码自动化测试越来越受欢迎?一文2000字解析
  • cleanmymac最新2023版 mac清理软件CleanMyMac X4.12.5 中文版功能介绍
  • pyhon部署注意事项
  • 宣城x移动云,打造“城市级物联感知平台”
  • 英伟达Jetson NX套件刷机,配置Ubuntu20。
  • Vue计算属性
  • 代码随想录刷题-字符串-反转字符串
  • 14-链表练习-剑指 Offer II 021. 删除链表的倒数第 n 个结点
  • 用Java解决华为OD机试考题,真的高效,真的强,来吧,清单奉上,祝你上岸
  • 【Stable Diffusion】Stable Diffusion免安装在线部署教程
  • Jetson设备如何接调试串口工具查看内核打印信息
  • 一直被低估的美图,正悄悄成为AIGC领跑者
  • JAVA开发与运维(JavaWeb测试环境搭建)
  • python 的range函数你需要知道三件事
  • 穿越周期的进击,科沃斯“敢”于变革
  • 不使用IF语句对一组数进行排序的分析和实现
  • 在大厂做了5年测试,3月被无情辞退,想给摸鱼的兄弟提个醒
  • 【职业规划】第二篇:程序员分级之中级程序员