解题思路:

注意事项:

参考代码:

#include<bits/stdc++.h>
using namespace std;
struct Node{
    char val;
    Node* cl;
    Node* cr;
};
//建树
void creatTree(Node** T,char data){
    if(*T==NULL){
        Node* node=new Node;
        node->val=data;
        node->cl=NULL;
        node->cr=NULL;
        *T=node;
    }
    else{
        if(data > (*T)->val) creatTree((&(*T)->cr),data);
        else if(data < (*T)->val) creatTree((&(*T)->cl),data);
    }
    return;
}
//获取前中后序列
void dfs(Node* T,string& s,int x){
    if(x==1){
        if(T!=NULL){
            s+=T->val;
            dfs(T->cl,s,x);
            dfs(T->cr,s,x);
        }
    }else if(x==2){
        if(T!=NULL){
            dfs(T->cl,s,x);
            s+=T->val;
            dfs(T->cr,s,x);
        }
    }else if(x==3){
        if(T!=NULL){
            dfs(T->cl,s,x);
            dfs(T->cr,s,x);
            s+=T->val;
        }
    }
}

vector<string> getorder(Node* T){
    string a,b,c;
    dfs(T,a,1);//pre
    dfs(T,b,2);//mid
    dfs(T,c,3);//last
    vector<string>arr;
    arr.push_back(a);
    arr.push_back(b);
    arr.push_back(c);
    return arr;
}

int main()
{
    int n;
    while(cin>>n){
        if(n==0) return 0;
        string s;
        cin>>s;
        Node* T=NULL;
        for(auto &k:s){
            creatTree(&T,k);
        }
        vector<string>arr;
        arr=getorder(T);
        while(n--){
            string st;
            cin>>st;
            Node* newT=NULL;
            for(auto &k:st){
                creatTree(&newT,k);
            }
            vector<string>t;
            t=getorder(newT);
            if(t==arr) cout<<"YES\n";
            else cout<<"NO\n";
            
        }
    }
    return 0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论