L2-004 这是二叉搜索树吗?
看了大佬的做法,然后模仿的,理解的不是很透彻
#include <iostream>
#include <vector>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int n, a[1001]={0};
vector<int> post; //存储后序遍历结果的数组
bool f = 0; //根据二叉搜索树性质不符合题意,则使f=1,然后判断其镜像是否符合题意
void fun(int r, int l){
if(r>l) return;
int t = a[r];
int p1 = r+1;
int p2 = l;
if(!f){
while(p1<=l&&a[p1]<t) p1++;
while(p2>r&&a[p2]>=t) p2--;
}else{
while(p1<=l&&a[p1]>=t) p1++;
while(p2>r&&a[p2]<t) p2--;
}
if(p1-p2!=1) return;
fun(r+1,p2); //左
fun(p1,l); //右
post.push_back(t); //根
}
int main(int argc, char** argv) {
bool ff = 1;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
fun(1,n);
if(post.size()!=n){
f = 1;
fun(1,n);
if(post.size()!=n){
ff = 0;
}
}
if(!ff){
cout<<"NO"<<endl;
}else{
cout<<"YES"<<endl;
for(int i=0;i<n;i++){
if(i==n-1){
cout<<post[i]<<endl;
}else{
cout<<post[i]<<" ";
}
}
}
return 0;
}

1028

被折叠的 条评论
为什么被折叠?



