[Jobdu] 题目1367:二叉搜索树的后序遍历序列
2015-08-04 19:59
323 查看
题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
输入:
每个测试案例包括2行:
第一行为1个整数n(1<=n<=10000),表示数组的长度。
第二行包含n个整数,表示这个数组,数组中的数的范围是[0,100000000]。
输出:
对应每个测试案例,如果输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出No。
样例输入:
样例输出:
代码:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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
代码:
#include <cstdio> int isValid(int a[], int low, int high) { if (low >= high) return 1; int root = a[high]; int i = low; while (a[i] < root && i <= high) i++; for (int j = i; j < high; j++) if (a[j] < root) return false; return isValid(a, low, i - 1) && isValid(a, i, high - 1); } int main() { int n; while (scanf("%d", &n) != EOF) { int a ; for (int i = 0; i < n; ++i) scanf("%d", &a[i]); if (isValid(a, 0, n - 1)) { printf("Yes\n"); } else { printf("No\n"); } } return 0; } /************************************************************** Problem: 1367 User: tonyhu Language: C++ Result: Accepted Time:10 ms Memory:1020 kb ****************************************************************/
相关文章推荐
- HDU5137
- 第一天 ted英语学习Chris Milk: How virtual reality can create the ultimate empathy machine
- 《Windows Internals》第六版 Chapter 6 Security 笔记
- Android开发--Intent-filter属性详解
- Java中的多线程
- [LeetCode]Remove Duplicates from Sorted Array II
- [leetcode] Maximum Gap
- CodeForces 560A Currency System in Geraldion
- poj-2553 Frogger
- Populating Next Right Pointers in Each Node II
- 深入分析安卓软件安装原理
- eclipse get set 大小写
- ubuntu14.04 kylin下安装android studio
- FileInputStream 读取文件数据的输入字节流
- Java 正确遍历字符串
- IAP入门笔记
- SDKD Summer Team Contest A
- 第八章集合运算
- C语言编程入门——综合练习(一)
- Deep Learning: Assuming a deep neural network is properly regulated, can adding more layers actually make the performance degrade?