如何遍历一个trie来显示所有的单词?
How to traverse a trie to display all the words?
这是我在 C++ 中使用 unordered_map
声明的 trie
class trie{
public:
unordered_map<char,trie*>m;
bool isEnd;
};
这是我的插入函数(另一个 class 的一部分)
trie *root=nullptr;
trie *getNode()
{
trie *tmp=new trie();
tmp->isEnd=false;
return tmp;
}
void insert(string s)
{
if(!root)
root=getNode();
trie *tmp=root;
for(int i=0;i<s.length();i++)
{
if(tmp->m.find(s[i])==tmp->m.end())
tmp->m[s[i]]=getNode();
tmp=tmp->m[s[i]];
}
tmp->isEnd=true;
}
如何递归或迭代遍历这个trie来显示所有的单词。
void iterate_(const trie* node, const std::string& prefix) {
if (node->isEnd) {
std::cout << prefix << std::endl;
}
for (const auto& [c, child] : node->m) {
iterate_(child, prefix + c);
}
}
void iterate() {
if (root) {
iterate_(root, "");
}
}
这是我在 C++ 中使用 unordered_map
声明的 trieclass trie{
public:
unordered_map<char,trie*>m;
bool isEnd;
};
这是我的插入函数(另一个 class 的一部分)
trie *root=nullptr;
trie *getNode()
{
trie *tmp=new trie();
tmp->isEnd=false;
return tmp;
}
void insert(string s)
{
if(!root)
root=getNode();
trie *tmp=root;
for(int i=0;i<s.length();i++)
{
if(tmp->m.find(s[i])==tmp->m.end())
tmp->m[s[i]]=getNode();
tmp=tmp->m[s[i]];
}
tmp->isEnd=true;
}
如何递归或迭代遍历这个trie来显示所有的单词。
void iterate_(const trie* node, const std::string& prefix) {
if (node->isEnd) {
std::cout << prefix << std::endl;
}
for (const auto& [c, child] : node->m) {
iterate_(child, prefix + c);
}
}
void iterate() {
if (root) {
iterate_(root, "");
}
}