-
题目描述:
-
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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 <iostream> #include <cstdio> using namespace std; bool VerifyBST(int array[],int length) { if(array == NULL || length <= 0) return false; int root = array[length - 1]; int i = 0; for(;i < length-1;++i) { if(array[i] > root) break; } int j = i; for(;j<length - 1;++j) { if(array[j] < root) return false; } bool left = true; if(i > 0) left = VerifyBST(array,i); bool right = true; if(i < length - 1) right = VerifyBST(array+i,length-i-1); return (left&&right); } int main(int argc,char* argv[]) { int length; while(scanf("%d",&length)!=EOF) { int* array = new int[length]; for(int i = 0; i < length;++i) scanf("%d",&array[i]); if(VerifyBST(array,length)) cout<<"Yes"<<endl; else cout<<"No"<<endl; delete[] array; } return 0; }