复制代码段学习哦 代码很明了
/*实现tire树 :①定义tire树结点
②树初始化
③插入单词函数
④判断单词是否存在
⑤判断单词前缀是否存在
*/
#include<iostream>
using namespace std;
//tire树_结点定义
struct tirenode{
bool is_end =false; //判断是否是一个完整单词
tirenode *next[26];
};
//tire树_初始化
tirenode *root;
void initialize(){
root=new struct tirenode();
}
//tire树_插入操作
int insert(string s){
tirenode *curr = root; //从根节点向下
for(int i=0;i<s.length();i++){
char c=s[i];
if(curr->next[c-'a']==NULL){ //不存在该单词则加入
curr->next[c-'a']=new struct tirenode();
}
curr=curr->next[c-'a'];
if(i=s.length()-1)curr->is_end=true; //存入该单词后标记
}
}
//tire树_单词的判断
bool judge_word(string s){
tirenode *curr = root;
for(int i=0;i<s.length();i++){
char c=s[i];
if(curr->next[c-'a']==NULL){
return false;
}
curr=curr->next[c-'a'];
if(i=s.length()-1)
return curr->is_end;
}
}
//tire树_前缀的判断
bool judge_prefix(string s){
tirenode *curr = root;
for(int i=0;i<s.length();i++){
char c=s[i];
if(curr->next[c-'a']==NULL){
return false;
}
curr=curr->next[c-'a'];
}
return true;
}
int main(){
initialize();//初始化树
string s1;
cout<<"请输入要操作的次数:"<<endl;
int n;cin>>n;
for(int i=0;i<n;i++){
cout<<"请输入要操作的字符串:"<<endl;
cin>>s1;
cout<<"请选择操作:0==插入,1==判断单词,2==判断前缀"<<endl;
int a;cin>>a;
if(a==0)insert(s1);
if(a==1)if(judge_word(s1))cout<<"存在"<<endl;else cout<<"不存在"<<endl;
if(a==2)if(judge_prefix(s1))cout<<"存在"<<endl;else cout<<"不存在"<<endl;;
cout<<"剩余执行次数"<<n-i-1<<"次"<<endl;
}
return 0;
}