您的位置:首页 > 其它

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

2015-08-04 19:59 323 查看
题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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
****************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: