- 题目描述:
-
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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
- 代码:
1 #include <cstdio> 2 3 int isValid(int a[], int low, int high) { 4 if (low >= high) 5 return 1; 6 7 int root = a[high]; 8 int i = low; 9 while (a[i] < root && i <= high) 10 i++; 11 for (int j = i; j < high; j++) 12 if (a[j] < root) 13 return false; 14 return isValid(a, low, i - 1) && isValid(a, i, high - 1); 15 } 16 17 int main() { 18 int n; 19 while (scanf("%d", &n) != EOF) { 20 int a[n]; 21 for (int i = 0; i < n; ++i) 22 scanf("%d", &a[i]); 23 24 if (isValid(a, 0, n - 1)) { 25 printf("Yes "); 26 } else { 27 printf("No "); 28 } 29 } 30 return 0; 31 } 32 /************************************************************** 33 Problem: 1367 34 User: tonyhu 35 Language: C++ 36 Result: Accepted 37 Time:10 ms 38 Memory:1020 kb 39 ****************************************************************/