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

时间:2022-06-03 15:22:35
题目描述:

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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 ; 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 - ) && isValid(a, i, high - );
} int main() {
int n;
while (scanf("%d", &n) != EOF) {
int a[n];
for (int i = ; i < n; ++i)
scanf("%d", &a[i]); if (isValid(a, , n - )) {
printf("Yes\n");
} else {
printf("No\n");
}
}
return ;
}
/**************************************************************
Problem: 1367
User: tonyhu
Language: C++
Result: Accepted
Time:10 ms
Memory:1020 kb
****************************************************************/