题目意思:输入n与l,先给出一列个数为n模板插入序列,后面接着l个插入序列与模板序列进行对比并输出"Yes"或"No",当输入的n为0时结束程序。
思路:先建树再判断先序或后序遍历序列是否一致(中序序列都是小到大不能当作判断依据)。
第一种代码
#include<iostream>
#include<cstdlib>
#include<vector>
using namespace std;
typedef struct BTree *Ptr;
struct BTree{
int data;
Ptr left;
Ptr right;
};
typedef Ptr BT;
BT btree;
vector<int> b1,b2;
//只需判断先序或后序遍历序列是否一致,中序序列都是小到大不能当作判断依据
void push(BT &bt,vector<int> &b){
if(bt != NULL){
b.push_back(bt->data);
push(bt->left,b);
push(bt->right,b);
}
}
BT insert(BT bst,int x){
if(bst != NULL){
if(bst->data > x){
bst->left = insert(bst->left,x);
}else{
bst->right = insert(bst->right,x);
}
}else{
bst = (BT)malloc(sizeof(struct BTree));
bst->data = x;
bst->left = bst->right = NULL;
}
return bst;
}
int main(){
int n,l,x;
cin>>n;
while(n){
cin>>l;
for(int i = 1; i <= n; i++){//模板树
cin>>x;
btree = insert(btree,x);
}
push(btree,b1);//btree先序遍历的序列加入b1中
btree = NULL;
for(int i = 1; i <= l ; i++){
for(int i = 1; i <= n; i++){//与模板树对比的树
cin>>x;
btree = insert(btree,x);
}
push(btree,b2);//btree先序遍历的序列加入b2中
btree = NULL;
if(b2 == b1) cout<<"Yes\n";
else cout<<"No\n";
b2.clear();
}
b1.clear();
cin>>n;
}
return 0;
}
第二种代码
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
const int N = 10010;
typedef struct Node* Tree;
struct Node{
int data;
Tree l,r;
Node(int _data){
data = _data;
l = r = nullptr;
}
};
void insert(int x,Tree &tree){
if(tree == nullptr) {
tree = new Node(x);
return;
}
if(x > tree->data) insert(x,tree->r);
else insert(x,tree->l);
}
void getlist(vector<int> &standqx,Tree tree){
if(tree == nullptr) return;
standqx.push_back(tree->data);
getlist(standqx,tree->l);
getlist(standqx,tree->r);
}
int main(){
int n,l;
while(cin>>n){
if(n == 0) break;
cin>>l;
Tree roota = nullptr;
for(int i = 0; i < n; i++) {
int x; cin>>x;
insert(x,roota);
}
vector<int> standqx;
getlist(standqx,roota);
for(int i = 0; i < l; i++){
Tree rootb = nullptr;
for(int j = 0; j < n; j++) {
int x; cin>>x;
insert(x,rootb);
}
vector<int> qx;
getlist(qx,rootb);
if(qx == standqx) puts("Yes");
else puts("No");
}
}
return 0;
}