【剑指offer】二叉搜索树的后序遍历序列
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26092725
剑指offer上的第24题,主要考察递归思想,九度OJ上AC。
- 题目描写叙述:
-
输入一个整数数组,推断该数组是不是某二叉搜索树的后序遍历的结果。假设是则输出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
要紧紧抓住二叉搜索树的特点,对于后序遍历序列,其每一个子树的最后一个元素会比前面的左边一部分大,右边一部分小,这样便能够通过递归来推断。
AC代码例如以下:
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h> bool IsBehSequenceBST(int *seq,int len)
{
if(seq==NULL || len<1)
return false; int root = seq[len-1];
int i;
for(i=0;i<len-1;i++)
if(seq[i]>root)
break; //第一个右子树元素的下标
int RightStart = i; for(;i<len-1;i++)
if(seq[i]<root)
return false; bool left = true;
if(RightStart > 0)
left = IsBehSequenceBST(seq,RightStart);
bool right = true;
if(RightStart < len-1-RightStart)
right = IsBehSequenceBST(seq+i,len-RightStart-1); return (left && right); } int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
int *seq = (int *)malloc(n*sizeof(int));
if(seq == NULL)
exit(EXIT_FAILURE); int i;
for(i=0;i<n;i++)
scanf("%d",seq+i);
if(IsBehSequenceBST(seq,n))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
/************************************************************** Problem: 1367 User: mmc_maodun Language: C Result: Accepted Time:70 ms Memory:1308 kb****************************************************************/【剑指offer】二叉搜索树的后序遍历序列的更多相关文章
- 剑指Offer 二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 思路: 后续遍历数组的尾部为根节点,前面的部分 ...
- 剑指Offer——二叉搜索树的后序遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉查找树(Binary Search ...
- [剑指offer] 二叉搜索树的后序遍历序列 (由1个后续遍历的数组判断它是不是BST)
①题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ②思路 1.后续遍历的数组里,最后一个元素是根. 2 ...
- 用js刷剑指offer(二叉搜索树的后序遍历序列)
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 牛客网链接 js代码 function Verif ...
- 剑指offer--30.二叉搜索树的后序遍历序列
正常情况下,因为二叉搜索树,左子树所有结点比根小,右子树所有结点比根大,所以循环一遍就能结束 ----------------------------------------------------- ...
- 剑指Offer-23.二叉搜索树的后序遍历序列(C++/Java)
题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉树的后序遍历也就是先访问左子树,再访问右 ...
- 剑指offer24 二叉搜索树的后序遍历序列
自己写的更简洁的代码 class Solution { public: bool VerifySquenceOfBST(vector<int> sequence) { int length ...
- 《剑指offer》二叉搜索树的后序遍历序列
本题来自<剑指offer> 二叉搜索树的后序遍历序列 题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字 ...
- 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列
剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...
- 剑指Offer:二叉搜索树的后序遍历序列【33】
剑指Offer:二叉搜索树的后序遍历序列[33] 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ...
随机推荐
- (转)HTML特殊字符
HTML 原始码 显示结果 描述 < < 小於号或显示标记 > > 大於号或显示标记 & & 可用於显示其它特殊字符 " " 引号 ® ® ...
- Excel连接字符串(Oledb)
Excel的连接字符串参数详解 2011-07-27 15:43:50| 分类: 编程专栏 | 标签:excel 连接字符串 参数 含义 |字号大中小 订阅 程序中读取Excel ...
- 连接、关联、JOIN、APPLY(SQL Server)
连接方式 连接类型 个人总结 阐述(生成两个集合的约束笛卡儿积) INNER JOIN 内连接 关联相同的(用于查找关联的信息) FROM C AS c INNER JOIN D AS d ON ...
- bash:ifconfig command not found for contos7.0
CentOS7刚发布,我忍不住把DELL T410从CentOS6升级到CentOS7.好不容易等安装结束后,立即配置网络,然后在yum源上安装环境.可是执行ifconfig的时候系统提示让我傻了眼: ...
- RTX管理器服务运行状态空白
A)打开RTX管理器安装目录下的bin文件夹,运行convert.bat 右键计算机——管理——服务——找到以RTX开头的服务,按RTX_ConfigCenter.RTX_HTTPServer. RT ...
- MySQL利用binlog来恢复数据库
1.根据binlog解析出所有ring数据库的所有sql [mysql@localhost ]$ mysqlbinlog --no-defaults --database=ring --start-d ...
- iOS改变图片尺寸
- (UIImage *)originImage:(UIImage *)image scaleToSize:(CGSize)size { UIGraphicsBeginImageContext(siz ...
- 武汉科技大学ACM:1007: 不高兴的津津
Problem Description 津津上初中了.妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她 报名的各科复习班.另外每周妈妈还会送她去学习朗诵.舞蹈和钢琴.但是津津如果一 ...
- 你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8 用结构体类型描述复杂的事物
3.8 用结构体类型描述复杂的事物 利用C++本身所提供的基本数据类型所定义的变量,只能表达一些简单的事物.比如我们可以用int类型定义nAge变量表示人的年龄,用string类型定义strName ...
- 在Mvc中创建WebApi是所遇到的问题
1.提示"The 'ObjectContent`1' type failed to serialize the response body for content type 'applica ...