2022.1.27 练习 PAT甲 1043 Is It a Binary Search Tree(原题链接)
每次复制一段代码到其他地方,都不记得把该改的都改完了,你不0分谁0分,我对自己呵呵两声。。。。
题解如下:
#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> input;
vector<int> pre;
vector<int> post;
vector<int> pre_MI;
vector<int> post_MI;
struct node
{
int data;
node* lchild;
node* rchild;
};
void Insert(node* &root,int x)
{
if(root==NULL)
{
root=new node;
root->data=x;
root->lchild=NULL;
root->rchild=NULL;
return;
}
if(x<root->data)
{
Insert(root->lchild,x);
}
else
{
Insert(root->rchild,x);
}
}
void preorder(node* root)
{
if(root==NULL)
return;
pre.push_back(root->data);
preorder(root->lchild);
preorder(root->rchild);
}
void preorder_MI(node* root)
{
if(root==NULL)
return;
pre_MI.push_back(root->data);
preorder_MI(root->rchild);
preorder_MI(root->lchild);
}
void postorder(node* root)
{
if(root==NULL)
return;
postorder(root->lchild);
postorder(root->rchild);
post.push_back(root->data);
}
void postorder_MI(node* root)
{
if(root==NULL)
return;
postorder_MI(root->rchild);
postorder_MI(root->lchild);
post_MI.push_back(root->data);
}
int main()
{
std::ios::sync_with_stdio(false);
cin>>n;
node* root=NULL;
for(int i=0;i<n;i++)
{
int tmp;
cin>>tmp;
input.push_back(tmp);
Insert(root,tmp);
}
preorder(root);
preorder_MI(root);
postorder(root);
postorder_MI(root);
if(pre==input)
{
cout<<"YES"<<endl;
for(vector<int>::iterator it=post.begin();it!=post.end();it++)
{
cout<<*it;
if(it<post.end()-1)
cout<<" ";
}
}
else if(pre_MI==input)
{
cout<<"YES"<<endl;
for(vector<int>::iterator it=post_MI.begin();it!=post_MI.end();it++)
{
cout<<*it;
if(it<post_MI.end()-1)
cout<<" ";
}
}
else
{
cout<<"NO"<<endl;
}
return 0;
}