[Jobdu] 题目1367:二叉搜索树的后序遍历序列

题目描述:

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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\n");
26         } else {
27             printf("No\n");     
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 ****************************************************************/

 

posted @ 2015-08-04 19:59  Tony-Hu  阅读(280)  评论(0编辑  收藏  举报