前缀树 实现tire树 字典树的学习

复制代码段学习哦  代码很明了

/*实现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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值