看代码就懂了
#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define endl '\n'
#define rep(i,a,n) for (int i = a; i < n; i ++ )
#define repn(i,a,n) for (int i = a; i <= n; i ++ )
#define pb push_back
#define IOS ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
#define all(x) (x).begin(),(x).end()
typedef pair<int,int> PII;
ll lowbit(ll x) { return x & (- x); }
ll gcd(ll a,ll b) { return b ? gcd(b,a % b) : a; }
const int mod = 1e9+7;
struct node
{
int val;
node *left;
node *right;
node(int x) : val(x), left(NULL), right(NULL) {}
};
node *root, *croot, *nullroot;
node *insert(node *root, int x) //建立二叉搜索树
{
if(!root) root = new node(x);
else if (root->val > x) root->left = insert(root->left, x);
else root->right = insert(root->right, x);
return root;
}
bool sametree(node *root, node *croot) //判断是否是同一棵树
{
if(!root && !croot) return true;
if(!root || !croot) return false; //一个树空,另一个非空
if(root->val == croot->val) //同一个点相同
{
return sametree(root->left, croot->left) && sametree(root->right, croot->right); //左右子树是否相同
}
else return false;
}
int main()
{
IOS;
int n, q;
while(cin >> n && n) {
cin >> q;
root = nullroot;
for (int i = 0; i < n; i ++ ) {
int x; cin >> x;
root = insert(root, x);
}
while(q -- ) {
croot = nullroot;
for (int i = 0; i < n; i ++ ) {
int x; cin >> x;
croot = insert(croot, x);
}
if(sametree(root, croot)) cout << "Yes" << endl;
else cout << "No" << endl;
}
}
return 0;
}