c++实现简单版本前缀树
#include<iostream>
#include<map>
using namespace std;
class TrieNode {
public:
string str;
map<char, TrieNode *> child;
};
void InsertStr(TrieNode *root, string input) {
TrieNode *tempNode = root;
for(size_t i = 0; i < input.size(); i++) {
char tempChar = input[i];
if(tempNode->child.count(tempChar) <= 0) {
tempNode->child[tempChar] = new TrieNode();
}
tempNode = tempNode->child[tempChar];
}
tempNode->str = input;
}
bool searchStr(TrieNode *root, string inputStr) {
TrieNode *tempNode = root;
for(size_t i = 0; i < inputStr.size(); i++) {
if(tempNode->child.count(inputStr[i]) > 0) {
tempNode = tempNode->child[inputStr[i]];
} else {
return false;
}
}
if(tempNode->str == inputStr) {
return true;
}
return false;
}
int main() {
TrieNode *root = new TrieNode();
InsertStr(root, "中国人");
InsertStr(root, "刘德华");
InsertStr(root, "abcd");
if(searchStr(root, "中国人")) {
cout<<"包含字符串中国人"<<endl;
}
if(searchStr(root, "adc")) {
cout<<"包含字符串adc"<<endl;
} else {
cout<<"不包含adc"<<endl;
}
}