【发布时间】:2021-05-20 00:53:50
【问题描述】:
对于我可能犯的任何英语错误,我深表歉意。 我有一个大学的学校项目,我必须使用 trie 来索引单词并具有多种功能来做多种事情。 我正在用C编程。 我已经完成了一个递归函数来查找 trie 中最大的单词并且它正在工作。 函数如下:
int BiggestWord(ELEMENT *P)
{
if (!P) return -1;
int Alt_max = 0;
for (int i = 0; i < MAX_VECTOR; i++)
Alt_max = Biggest(BiggestWord(P->V[i]), Alt_max);
return 1 + Alt_max;
}
'Biggest' 只是一个返回两个值之间最大值的函数。
现在是最小单词函数。我正在考虑如何做到这一点,并尝试检查单词何时结束在每个元素之后寻找“NULL”。 这是我的尝试:
int SmallestWord(ELEMENT *P)
{
if (!P) return -1;
int Alt_min = 1;
for (int i = 0; i < MAX_VECTOR; i++)
{
if(P->V[i] != NULL)
{
SmallestWord(P->V[i]);
Alt_min++;
}
}
return Alt_min;
}
我找不到让它工作的方法。 我还考虑尝试在每个单词之后指出单词的结尾,然后尝试遍历 trie 的每个分支并找到最小的单词。 这是我前半年的编码,我在尝试学习它时遇到了一些困难。 如果有人可以通过给我提示或试图给我去哪里的线索来帮助我,我将非常感激,因为这是一个非常重要的项目,我必须完成并做好。
另外,我的数据结构如下:
#define MAX_VECTOR 26 // 我使用的 26 个字母
typedef struct ELEMENT
{
int occurrences_word; // this is used for counting number of occurrences of a word
struct ELEMENT *V[MAX_VECTOR];
} ELEMENT;
typedef struct TRIE
{
ELEMENT *root_trie;
int num_words;
} TRIE;
提前感谢所有帮助我的人 问候
【问题讨论】:
-
当且仅当它的
V的所有元素都是NULL时,一个元素标记一个单词的结尾,对吗? -
如果不是这种情况,则需要额外的 if 来计算发生次数> 0但同时不是叶节点的“内部单词”。