题目1367:二叉搜索树的后序遍历序列
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:1474
解决:740
-
题目描述:
-
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
-
输入:
-
每个测试案例包括2行:
第一行为1个整数n(1<=n<=10000),表示数组的长度。
第二行包含n个整数,表示这个数组,数组中的数的范围是[0,100000000]。
-
输出:
-
对应每个测试案例,如果输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出No。
-
样例输入:
-
75 7 6 9 11 10 847 4 6 5
-
样例输出:
-
Yes
-
No
-
//c中没有bool类型 #include<stdio.h> #include<malloc.h> int isValid(int *arr,int n) { int i; int right_index=n-1; int is_valid=1; for(i=n-2;i>=0;i--) { if(arr[i]<arr[n-1]) { right_index=i+1; break; } right_index=i; } if(right_index==0) return is_valid; for(i=right_index-1;i>=0;i--) { if(arr[i]>=arr[n-1]) { is_valid=0; return is_valid; } } return is_valid; } int main() { int n; int i; int is_valid; while(scanf("%d",&n)!=EOF) { int *arr=(int *)malloc(sizeof(int)*n); for(i=0;i<n;i++) scanf("%d",&arr[i]); is_valid=isValid(arr, n); if(is_valid) printf("Yes\n"); else printf("No\n"); } return 0; } /************************************************************** Problem: 1367 User: road Language: C Result: Accepted Time:10 ms Memory:912 kb ****************************************************************/