原题链接:二叉搜索树
解题思路:
注意事项:
参考代码:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复