题目

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


考点

1.BST 二叉搜索树

2.递归


思路

1.后序遍历,根节点是序列的最后一个。

2.BST中左子树的值比根节点小,如果序列第一个数就比根节点大,说明没有左子树,break

3.BST中右子树的值比根节点大,如果右子树有比根节点小的数,说明不是BST,return false

4.递归 left=左子数,right=右子树

5.return left&&right


代码

class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
//1.入口检查
if(!sequence.size())
return false;
//2.根节点
int root = sequence.back();
auto itLeft=sequence.begin(); //3.是否左子树都比根节点小
for( ;itLeft<(sequence.end()-1);itLeft++)
{
if(*itLeft>root)
break;
}
auto itRight=itLeft;
//4.是否右子树都比根节点大
for(;itRight<(sequence.end()-1);itRight++)
{
if(*itRight<root)
return false;
} bool left=true;
//5.如果存在左子树,递归检查该左子树是否是BST
if(itLeft!=sequence.begin())
{
//检查左子树
vector<int> lefttemp;
for(int i=0;i<(itLeft-sequence.begin());i++)
{
lefttemp.push_back(sequence.front());
}
left=VerifySquenceOfBST(lefttemp);
} bool right=true;
//6.如果存在右子树,递归检查该右子树是否是BST
if(itRight!=itLeft)
{
//将左子树去掉
sequence.erase(sequence.begin(),itLeft);
//去掉根结点
sequence.pop_back();
//检查右子树
left=VerifySquenceOfBST(sequence);
} return left&&right;
}
};

问题

第33题:LeetCode255 Verify Preorder Sequence in Binary Search Tree 验证先序遍历是否符合二叉搜索树的更多相关文章

  1. [LeetCode] Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列

    Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...

  2. [LeetCode] 255. Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列

    Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...

  3. [Locked] Verify Preorder Sequence in Binary Search Tree

    Verify Preorder Sequence in Binary Search Tree Given an array of numbers, verify whether it is the c ...

  4. [Swift]LeetCode255.验证二叉搜索树的先序序列 $ Verify Preorder Sequence in Binary Search Tree

    Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...

  5. LeetCode Verify Preorder Sequence in Binary Search Tree

    原题链接在这里:https://leetcode.com/problems/verify-preorder-sequence-in-binary-search-tree/ 题目: Given an a ...

  6. Leetcode 255. Verify Preorder Sequence in Binary Search Tree

    验证一个list是不是一个BST的preorder traversal sequence. Given an array of numbers, verify whether it is the co ...

  7. 255. Verify Preorder Sequence in Binary Search Tree

    题目: Given an array of numbers, verify whether it is the correct preorder traversal sequence of a bin ...

  8. [LC] 255. Verify Preorder Sequence in Binary Search Tree

    Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...

  9. [LeetCode] 255. Verify Preorder Sequence in Binary Search Tree_Medium tag: Preorder Traversal, tree

    Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...

随机推荐

  1. python3+Appium自动化11-data数据封装之python读取csv文件

    使用背景 实际项目中,我们的测试数据可能存储在一个数据文件中,如txt.excel.csv文件类型.我们可以封装一些方法来读取文件中的数据来实现数据驱动 enumerate()简介 enumerate ...

  2. JMeter远程分布式联机性能测试

    测试环境 apache-jmeter-2.13 Java JDK版本:1.8 1.  JMeter分布式测试简介 当一个JMeter客户端因网络限制等因素,无法模拟足够的用户对服务器施压时,需要用到J ...

  3. 关闭ubuntu讨厌的内部错误提示

    修改/etc/default/apport 浏览下/etc/init/apport.conf 内容你会发现,控制此服务是否启动的是/etc/default/apport 所以把/etc/default ...

  4. 换晶振导致stm32串口数据飞码的解决办法(补充)

    今天(2014.4.21)把stm32f107的程序下载到stm32f103的板子上,发现串口收不到数据,突然想起晶振频率没有修改,#define HSE_VALUE    ((uint32_t)13 ...

  5. node搭环境(二)之 bower gulp

    前面详细记录了安装node及git,接来下要安装bower,首先创建一个空文件夹bowerandgulp. 步骤:1.安装node.js 2.node里面自带了 npm  3.通过npm 安装cnpm ...

  6. Spring课程 Spring入门篇 2-1 IOC和bean容器

    课程链接: 本节讲了5部分内容,6为项目demo: 1 接口及面向接口编程 2 什么是IOC 3 Spring的bean配置 4 Bean的初始化 5 Demo 自己理解: 1 高层模块和底层模块都依 ...

  7. VS Code 编译器的调试工具整理

    1 debbugeer for chrome的使用 下载安装,然后配置launch.json { "name": "Chrome",//名称 "typ ...

  8. 【MATLAB】画信号频谱的子函数

    输入信号序列和采样率,该子函数可以画出该信号的频谱图. function [f,spec,NFFT]=spec_fft_plot(sample,L,Fs) % 输入数据说明: % sample:信号序 ...

  9. [SVN]TortoiseSVN工具培训3─使用基本流程和图标说明

    1.SVN的使用基本流程 注意:对于文件编辑方面,上图的编辑副本操作前建议进行Get lock操作,以防出现后续的冲突等异常报错. 2.SVN的基本图标说明

  10. Jetty服务器的使用

    Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布.开发人员可以将 ...