先建树,通过insert()插入节点。
二叉搜索树的递归建立的过程如下:
图片说明
插入代码:

TreeNode *BuildTree(TreeNode *root,int x){
    if(root==NULL)
        root=new TreeNode(x);
    else if(root->val<x)
        root->right=BuildTree(root->right,x);
    else if(root->val>x)
        root->left=BuildTree(root->left,x);
    return root;
}

然后判断两树是否相等?
可以遍历前序,如果不相等则不同。也可以直接递归比较两树子树。
给出第二种方法:

bool is_equal(TreeNode *x,TreeNode *y){
    if(x==NULL && y==NULL)return true;
    else if(x==NULL&&y!=NULL || x!=NULL&&y==NULL)return false;
    if(x->val!=y->val)return false;
    return is_equal(x->left,y->left) && is_equal(x->right,y->right);
}

总代码:

#include<iostream>
#include<string>
using namespace std;
struct Node{
    char val;
    Node *left;
    Node *right;
    Node(char cc):val(cc),left(NULL),right(NULL){}
}; 
Node *insert(Node *root,char c){
    if(root==NULL){
        return new Node(c);
    }
    if(root->val>c){
        root->left=insert(root->left,c);
    }else{
        root->right=insert(root->right,c);
    }
    return root;
}
bool is_same1(Node *root1,Node *root2){
    if(root1==NULL&&root2==NULL)return true;
    if(root1!=NULL&&root2==NULL || root1==NULL&&root2!=NULL || root1->val!=root2->val){
        return false;
    }
    return is_same1(root1->left,root2->left)&&is_same1(root1->right,root2->right);
}
int main(){
    int n;
    string s,t;
    while(cin>>n){
        if(n==0)break;
        cin>>s;
        Node *root1=NULL;
        for(int i=0;i<s.size();i++){
            root1=insert(root1,s[i]);
        }
        for(int i=0;i<n;i++){
            cin>>t;
            Node *root2=NULL;
            for(int j=0;j<t.size();j++){
                root2=insert(root2,t[j]);
            }
            if(is_same1(root1,root2)){
                cout<<"YES"<<endl;
            }else cout<<"NO"<<endl;
        }
    }

    return 0;
}