0%

PAT A1043 Is It a Binary Search Tree

题目链接

解题思路

首先根据输入数据构建一棵二叉排序树,然后分别用vector存放其先序遍历、后序遍历、镜像先序遍历、镜像后序遍历。使用vector的好处是可以直接比较!然后把初始数据和先序遍历和镜像先序遍历比较,如果相等就对应输出对应后续遍历!

注意

1、自定义结构体记得加上构造函数。

2、树的镜像遍历可以直接将遍历左右子树的前后顺序改变一下,改成先r->right,再r->left。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <cstdio>
#include <vector>
using namespace std;
const int maxn=1010;
int n;
vector<int> nums;
struct Node{
int data;
Node* left;
Node* right;
Node(int d=0,Node* l=NULL,Node* r=NULL):data(d),left(l),right(r){}
};
Node* root=NULL;
void insert(Node* &r,int x){
if(r==NULL) {
r=new Node(x);
return;//要记得返回啊
}
if(r->data>x){
insert(r->left,x);
}else{
insert(r->right,x);
}
}
Node* build(){
Node* r=NULL;
for(int i=0;i<n;i++){
insert(r,nums[i]);
}
return r;
}
void preOrder(Node* r,vector<int>& v){
if (r==NULL) return;
v.push_back(r->data);
preOrder(r->left,v);
preOrder(r->right,v);
}
void postOrder(Node* r,vector<int>& v){
if(r==NULL) return;
postOrder(r->left,v);
postOrder(r->right,v);
v.push_back(r->data);
}
void preMorder(Node* r,vector<int>& v){
if(r==NULL) return;
v.push_back(r->data);
preMorder(r->right,v);
preMorder(r->left,v);
}
void postMorder(Node* r,vector<int>& v){
if(r==NULL) return;
postMorder(r->right,v);
postMorder(r->left,v);
v.push_back(r->data);
}
int main(){
scanf("%d",&n);
int x;
for(int i=0;i<n;i++) {
scanf("%d",&x);
nums.push_back(x);
}
root=build();
vector<int> pre,post,preM,postM;
preOrder(root,pre);
preMorder(root,preM);
if(nums==pre) {
printf("YES\n");
postOrder(root,post);
for(int i=0;i<n;i++){
if (i!=0) printf(" ");
printf("%d",post[i]);
}
}else if(nums==preM){
printf("YES\n");
postMorder(root,postM);
for(int i=0;i<n;i++){
if (i!=0) printf(" ");
printf("%d",postM[i]);
}
}else{
printf("NO\n");
}
return 0;
}

本文标题:PAT A1043 Is It a Binary Search Tree

文章作者:GavinYGM

发布时间:2020年08月28日 - 18:08

最后更新:2020年08月28日 - 18:08

原始链接:http://www.gavinygm.cn/2020/08/28/PAT-A1043-Is-It-a-Binary-Search-Tree/

许可协议: 转载请保留原文链接及作者。