Data structures 尝试TRIE-DS实现
因此,我尝试实现TRIE-DS,虽然树中的节点获得addWord结束后分配的单词值,但当我遍历树时,打印的值为零。我做错了什么,无法指出。请找个人帮忙Data structures 尝试TRIE-DS实现,data-structures,trie,Data Structures,Trie,因此,我尝试实现TRIE-DS,虽然树中的节点获得addWord结束后分配的单词值,但当我遍历树时,打印的值为零。我做错了什么,无法指出。请找个人帮忙 #include<iostream> #include<string> using namespace std; struct trie{ int words; int prefixes; trie* edges[26]; };
#include<iostream>
#include<string>
using namespace std;
struct trie{
int words;
int prefixes;
trie* edges[26];
};
void addWord(trie* vertex, string word){
if(word.length() == 0){
vertex->words = vertex->words + 1;
}
else{
// cout<<word<<endl;
vertex->prefixes = vertex->prefixes + 1;
char k = word[0];
if(vertex->edges[k - 'a'] == NULL){
trie *n = (trie*)malloc(sizeof(trie));
n->words = 0;
n->prefixes = 0;
for(int i=0;i<26;i++)
vertex->edges[i] = NULL;
vertex->edges[k - 'a'] = n;
}
word.erase(0, 1);
addWord(vertex->edges[k - 'a'], word);
}
};
void traverse(trie *vertex){
if(vertex != NULL){
for(int i=0;i<26;i++){
if(vertex->edges[i] != NULL){
traverse(vertex->edges[i]);
cout<<char(i+'a')<<" - "<<vertex->prefixes<< " : "<<vertex->words<<endl;
}
}
}
};
int main(){
string word = "hello";
trie* head = (trie*)malloc(sizeof(trie));
for(int i=0;i<26;i++)
head->edges[i] = NULL;
head->words = 0;
head->prefixes = 0;
addWord(head, word);
string s = "lo";
traverse(head);
return 0;
}
#包括
#包括
使用名称空间std;
结构trie{
智力词;
int前缀;
trie*边[26];
};
void addWord(trie*顶点,字符串字){
if(word.length()==0){
顶点->单词=顶点->单词+1;
}
否则{
//coutwords=0;
n->前缀=0;
for(int i=0;iedges[i]=NULL;
顶点->边[k-'a']=n;
}
字擦除(0,1);
添加单词(顶点->边[k-'a'],单词);
}
};
空心导线测量(trie*顶点){
如果(顶点!=NULL){
for(int i=0;iedges[i]!=NULL){
遍历(顶点->边[i]);
cout代码有两个问题:
在addWord
函数中,在else
块内,在for
循环中,将vertex->edges[i]=NULL;
更改为n->edges[i]=NULL;
您要求的问题是在遍历
函数中。您没有打印say lasto
所指节点的单词数,而是打印具有o
作为其边缘的节点。因此,只需更改此项:
你能在调试器中单步执行代码以查看其偏离轨道吗?如果不能,那么我会说这就是你做错的地方。@JimMischel,有什么特别的建议吗,特别是对于简单的单文件c/c++?建议什么?我的具体建议是启动调试器并单步执行代码,这样你就可以看到如果你不知道如何使用调试器,现在是学习的最佳时机。
cout<<char(i+'a')<<" - "<<vertex->edges[i]->prefixes<< " : "<<vertex->edges[i]->words<<endl;