原题链接:二叉搜索树
解题思路:
注意事项:
参考代码:
#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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复