-
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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
题目链接:1367
题目描述:
代码:
#include<iostream> #include<cstdlib> #include<cstdio> #include<algorithm> #include<cmath> #include<vector> using namespace std; typedef long long ll; struct Node //结点结构 { ll val; Node *left; Node *right; }; bool Is_BST(ll *val,int beg,int en) { if(beg>en) return true; int i,j; ll temp=val[en]; for(i=0;i<en;i++) { if(val[i]>temp) { break; } } for(j=i+1;j<en;j++) { if(val[j]<=temp) return false; } bool left=true; if(i>0) left=Is_BST(val,beg,i-1); bool right=true; if(i<en-1) right=Is_BST(val,i+1,en-1); return left&&right; } int main() { int n; while(scanf("%d",&n)==1) { ll *val=new ll[n+1]; for(int i=0;i<n;i++) scanf("%lld",&val[i]); if(Is_BST(val,0,n-1)) printf("Yes "); else printf("No "); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。