#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
const int size=26;
struct tire_node
{
bool is_word;
tire_node(){
is_word=false;
for(int i=0;i<26;i++)
child[i]=NULL;
}
tire_node *child[26];
};
class Tire{
public:
Tire(){
root=NULL;
}
tire_node *root;
void insert(char *str);
bool del(char *str);
bool search(char *str);
};
void Tire::insert(char *str){
if(root==NULL)
root=new tire_node();
tire_node *tmp=root;
while(*str!='\0'){
if(tmp->child[*str-'a']==NULL)
tmp->child[*str-'a'] = new tire_node;
tmp=tmp->child[*str-'a'];
str++;
}
tmp->is_word=true;
}
bool Tire::del(char *str){
tire_node *tmp=root;
while(*str!='\0'){
if(tmp->child[*str-'a']==NULL)
return false;
tmp=tmp->child[*str-'a'];
str++;
}
if(tmp->is_word){
tmp->is_word=false;
return true;
}
else
{
return false;
}
}
bool Tire::search(char *str)
{
tire_node *tmp=root;
while(*str!='\0'){
if(tmp->child[*str-'a']==NULL)
return false;
tmp=tmp->child[*str-'a'];
str++;
}
return tmp->is_word;
}
int main()
{
Tire tr;
tr.insert("abc");
cout<<tr.search("abc")<<endl;
cout<<tr.search("abcd")<<endl;
cout<<tr.search("ab")<<endl;
tr.insert("abcde");
cout<<tr.del("abcd")<<endl;
// for(;;);
return 0;
}
字典树
最新推荐文章于 2025-03-09 10:32:18 发布