题目描述:

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

输入:

每个测试案例包括2行:

第一行为1个整数n(1<=n<=10000),表示数组的长度。

第二行包含n个整数,表示这个数组,数组中的数的范围是[0,100000000]。

输出:

对应每个测试案例,如果输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出No。

样例输入:

7
5 7 6 9 11 10 8
4
7 4 6 5

样例输出:

Yes
No
【解题思路】对于二叉搜索树我们首先要明确一点:给出二叉搜索树也就意味着给出了的树的中序遍历序列,因为将节点排序后就是中序遍历序列,所以本题目中给出树的后序遍历序列,那么我们就可以唯一的确定一棵树。根据二叉搜索树的特点:树的根节点大于左子树任意元素,小于右节点任意元素,我们可以知道,后序遍历的最后一个节点8即根节点,可以将树分为5 7 6左子树,9 11 10右子树。然后分别对左右子树应用后序遍历的特点继续往下分。
    在我们递归分左右子树的过程中需要我们判断序列是否满足二叉树的情况,也即:给定的序列是否满足前面数字比序列的最后数小,其余数比序列最后数大的规律。不满足就判断这是非法的二叉树后序序列。
AC code:
#include <cstdio>
#include <vector>
using namespace std; bool flg; void check(vector<int> &vec,const int&a,const int&b)
{
int idx=a;
if(a==b)
return;
while(vec[idx]<vec[b])++idx;
if(idx!=a)
check(vec,a,idx-1);
if(idx==b)
return;
int tag=idx;
while(vec[idx]>vec[b])++idx;
if(idx!=b)
{
flg=false;
return ;
}else
check(vec,tag,b-1);
} int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
vector<int> vec;
flg=true;
for(int i=0;i<n;++i)
{
int tt;
scanf("%d",&tt);
vec.push_back(tt);
}
check(vec,0,n-1);
if(flg)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
/**************************************************************
Problem: 1367
User: huo_yao
Language: C++
Result: Accepted
Time:10 ms
Memory:1024 kb
****************************************************************/

题目链接:http://ac.jobdu.com/problem.php?pid=1367

九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299

【剑指Offer面试编程题】题目1367:二叉搜索树的后序遍历序列--九度OJ的更多相关文章

  1. (剑指Offer)面试题24:二叉搜索树的后序遍历序列

    题目: 输入一个整数数组,判断该数组是不是某个二叉搜索树的后序遍历的结果,如果是则返回true,否则返回false. 假设输入的数组的任意两个数字都互不相同. 思路: 根据二叉搜索树的后序遍历特点,很 ...

  2. 《剑指offer》— JavaScript(23)二叉搜索树的后序遍历序列

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

  3. 【剑指offer】面试题24:二叉搜索树的后序遍历序列

    题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 思路: 递归 注意,主要就是假定数组为空时结果为fa ...

  4. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

  5. 【剑指offer】面试题24:二叉搜索树的兴许前序遍历序列

    分析: 前序: 根 左 右 后序: 左 由 根 二叉搜索树: 左 < 根 < 右 那么这就非常明显了. def ifpost(postArray, start, end): #one or ...

  6. 剑指Offer22 判断数组是否为某二叉搜索树的后序遍历

    /************************************************************************* > File Name: 22_Sequen ...

  7. 剑指Offer面试题:22.二叉搜索树的后序遍历序列

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

  8. 《剑指offer》第三十三题(二叉搜索树的后序遍历序列)

    // 面试题33:二叉搜索树的后序遍历序列 // 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果. // 如果是则返回true,否则返回false.假设输入的数组的任意两个数字都 ...

  9. 剑指Offer(二十三):二叉搜索树的后序遍历序列

    剑指Offer(二十三):二叉搜索树的后序遍历序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...

随机推荐

  1. about Base64

    用webservice传送文件的时候发现,如果发送的文件中有0x00字符,会被认为是字符串结尾,后面的内容就发送不过去,因此需要对不是纯文本格式的文件做BASE64编码,这样文件中就不会有0x00这样 ...

  2. SQL 层级数据查询出树形状态

    WITH TEST AS (SELECT  DEPTID,PARENTDEPT,SORTORDER,1 SPAC,CONVERT(CHAR(200),RTRIM(DEPTID)+CONVERT(CHA ...

  3. PyQt5剪切板操作

    1.使用剪切板import sys,mathfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import ...

  4. python 语法-参数注释

    python 语法-参数注释 最近碰到的这样的代码: def func(a:"shuoming") -> int: print("函数已运行.") fun ...

  5. windows下的环境搭建配置redis

    http://blog.csdn.net/spring21st/article/details/11176723

  6. navicat for mysql 中文破解版(无需激活码)

    1.下载破解版Navicat for MySQ中文破解版 链接: https://pan.baidu.com/s/19BlJRx7tLnDPIM4U6DNWvA 提取码: d9ci 2.解压下载后的文 ...

  7. vjudge Trailing Zeroes (III) (二分答案 && 数论)

    嗯... 题目链接:https://vjudge.net/contest/318956#problem/E 这道题是二分答案+数论,但首先是数论,否则你不知如何二分... 首先关于一个阶乘的结果最后会 ...

  8. twisted 模拟scrapy调度循环

    """模拟scrapy调度循环 """from ori_test import pr_typeimport loggingimport ti ...

  9. css样式和定义的class都没问题,但样式却没生效

    今天开发遇到过这样的问题,主要原因是 css 文件格式有问题导致的.有问题的 css 样式的那一行下面的 css 样式不能生效

  10. 三大JavaScript框架对比——AngularJS、BackboneJS和EmberJS

    <三大JavaScript框架对比——AngularJS.BackboneJS和EmberJS> 本文转载自  作者:chszs,博客主页:http://blog.csdn.net/chs ...