题目描述:

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

解题思路:

根据二叉搜索的性质,后序遍历是先搜索左子树,再右子数,最后是根结点。对应到序列中就是,序列的最后一位为根结点,从头开始遍历序列中一段连续子序列小于根结点,为左子树,后一段连续子序列大于根结点,为右子树。

举个例子,序列为(2,4,3,6,7,5),则5为根结点,对应(2,4,3)都小于5,为左子树,(6,7)大于5,为右子树。再对每个子树递归。

注意,对于初试为空的序列,返回的结果应该是false。因此在递归过程中遇到空的子序列,需要多一个判断。或是重写一个递归函数,递归函数中的空序列返回true,而原函数中的空序列单独判断。

代码:

class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.size()==)
return false;
if(sequence.size()==)
return true;
vector<int> left;
vector<int> right;
int root = sequence[sequence.size()-];
int i;
for(i = ; i<(sequence.size()-); i++)
{
if(sequence[i]<root)
left.push_back(sequence[i]);
else
break;
}
for(i = i+; i<(sequence.size()-); i++)
{
if(sequence[i]>root)
right.push_back(sequence[i]);
else
return false;
}
if(left.size()== && right.size()==)
return true;
if(left.size()== && VerifySquenceOfBST(right))
return true;
if(right.size()== && VerifySquenceOfBST(left))
return true;
if(VerifySquenceOfBST(left) && VerifySquenceOfBST(right))
return true;
else
return false;
}
};

剑指offer:二叉搜索树的后续遍历序列的更多相关文章

  1. 剑指offer 二叉搜索树与双向链表

    html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, & ...

  2. [剑指offer] 二叉搜索树的后序遍历序列 (由1个后续遍历的数组判断它是不是BST)

    ①题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ②思路 1.后续遍历的数组里,最后一个元素是根. 2 ...

  3. 剑指offer之 二叉搜索树的后续遍历序列

    题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. public class Solution { ...

  4. 剑指offer 二叉搜索树和双向链表

    剑指offer 牛客网 二叉搜索树和双向链表 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 18:58:36 2019 ...

  5. 剑指Offer 二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   思路: 后续遍历数组的尾部为根节点,前面的部分 ...

  6. 剑指Offer——二叉搜索树的第k个结点

    题目描述: 给定一颗二叉搜索树,请找出其中的第k大的结点. 例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4 分析: 二叉搜索树中序遍历就是从小到大.只 ...

  7. 剑指Offer——二叉搜索树与双向链表

    题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 分析: 二叉搜索树,中序遍历就是排序的. 所以我们利用中序遍历,将前后两 ...

  8. 剑指Offer——二叉搜索树的后序遍历序列

    题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉查找树(Binary Search ...

  9. 用js刷剑指offer(二叉搜索树与双向链表)

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 牛客网链接 js代码 /* function TreeNode(x) { ...

随机推荐

  1. saltstack二次开发(二)

    Saltstack的api Salt-api有两种方式,一种是函数的形式,有人家定义好的函数,我们可以直接调用,直接写python代码调用函数或者类就可以了.第二种形式是salt-api有封装好的ht ...

  2. 让sublime text3支持Vue语法高亮显示[转]

    1.准备语法高亮插件vue-syntax-highlight. 下载地址:https://github.com/vuejs/vue-syntax-highlight 下载页面并下载: 解开压缩包vue ...

  3. ArcGIS API for JS4.7加载FeatureLayer,点击弹出信息并高亮显示

    我加载的是ArcGIS Server本地发布的FeatureService,ArcGIS API for JS4.7记载FeatureLayer时,在二维需要通过代码启用WebGL渲染,在三维模式下, ...

  4. python第三十课--异常(异常对象传递过程)

    演示异常对象传递的过程(往上“抛”),并将其解决 def func1(): print('func1...') print(10/0) def func2(): print('func2...') t ...

  5. 网站横幅切换jquery 插件

    最近做一个web项目,站点首页需要像 百度统计 页面类似的切换横幅,有兴趣的可以先看看它的效果,这样就比较容易理解为什么我单独做个插件.其实类似的 jquery 插件网上类似的多的去了,随便网上下了两 ...

  6. JAVA框架 Spring 和Mybatis整合(动态代理)

    一.使用传统方式的dao的书写方式,不建议.目前采用的是动态代理的方式交给mybatis进行处理. 首先回顾下动态代理要求: 1)子配置文件的中,namespace需要是接口的全路径,id是接口的方法 ...

  7. Kafka设计解析(十九)Kafka consumer group位移重设

    转载自 huxihx,原文链接 Kafka consumer group位移重设 本文阐述如何使用Kafka自带的kafka-consumer-groups.sh脚本随意设置消费者组(consumer ...

  8. Web.config中 mode="RemoteOnly" 跟mode="On" 区别

    转载网址:mode="RemoteOnly" 跟mode="On" 区别 <!-- 自定义错误信息 设置 customErrors mode=" ...

  9. lwip lwiperf 方法进行性能测试 4.5MB/S

    硬件配置: STM32F407 + DP83848 + FreeRTOS V10.1.1 + LWIP 2.1.2    2018年12月5日14:31:24 1.先读取 PHY 寄存器 , 查看 自 ...

  10. free命令(buffer与cache区别/linux查看空闲内存)

    自:http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html   Linux上free命令的输出. 下面是free的运行 ...