#include<stdio.h>
#include<vector>
using namespace std;
typedef struct Node{
int data;
struct Node *lchild,*rchild;
}BTnode,*BTree;
int n;
vector<int> ori,pre,preM,post,postM;
void insert(BTree &root,int data){
if(root==NULL){
root=new BTnode;
root->data=data;
root->lchild=root->rchild=NULL;
return;
}
if(data<root->data) insert(root->lchild,data);
else insert(root->rchild,data);
}
void PreOrder(BTree root,vector<int> &v){
if(root==NULL)
return;
v.push_back(root->data);
PreOrder(root->lchild,v);
PreOrder(root->rchild,v);
}
void PreOrderMirror(BTree root,vector<int> &v){
if(root==NULL)
return;
v.push_back(root->data);
PreOrderMirror(root->rchild,v);
PreOrderMirror(root->lchild,v);
}
void PostOrder(BTree root,vector<int> &v){
if(root==NULL)
return;
PostOrder(root->lchild,v);
PostOrder(root->rchild,v);
v.push_back(root->data);
}
void PostOrderMirror(BTree root,vector<int> &v){
if(root==NULL)
return;
PostOrderMirror(root->rchild,v);
PostOrderMirror(root->lchild,v);
v.push_back(root->data);
}
int main(){
scanf("%d",&n);
int data;
BTree root=NULL;
for(int i=0;i<n;i++){
scanf("%d",&data);
ori.push_back(data);
insert(root,data);
}
PreOrder(root,pre);
PreOrderMirror(root,preM);
PostOrder(root,post);
PostOrderMirror(root,postM);
if(ori==pre){
printf("YES\n");
for(int i=0;i<post.size();i++){
printf("%d",post[i]);
if(i!=post.size()-1)
printf(" ");
}
}
else if(ori==preM){
printf("YES\n");
for(int i=0;i<postM.size();i++){
printf("%d",postM[i]);
if(i!=postM.size()-1)
printf(" ");
}
}
else{
printf("NO\n");
}
}
1043. Is It a Binary Search Tree (25) PAT甲级
最新推荐文章于 2024-11-27 20:25:31 发布
本文介绍了一种通过二叉树插入、前序遍历、前序镜像遍历、后序遍历及后序镜像遍历来判断输入序列是否为有效二叉搜索树的方法,并给出了具体的C++实现代码。
562

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



