C 在搜索函数中返回一个trie节点
我正在用trie编写一个程序。我的搜索函数返回一个整数,但我需要它返回一个trie节点C 在搜索函数中返回一个trie节点,c,trie,C,Trie,我正在用trie编写一个程序。我的搜索函数返回一个整数,但我需要它返回一个trie节点 struct TrieNode{ struct TrieNode *children[ALPHABET_SIZE]; int repeat; int groupNumber; int groupName; int isLeaf; }; int CHAR_TO_INDEX(int c){ if(c >= 97 && c <= 122){
struct TrieNode{
struct TrieNode *children[ALPHABET_SIZE];
int repeat;
int groupNumber;
int groupName;
int isLeaf;
};
int CHAR_TO_INDEX(int c){
if(c >= 97 && c <= 122){
c -= 97;
}
else if(c >= 65 && c <= 90){
c = c - 65 + 32;
}
else
return -1;
return c;
}
int search(struct TrieNode *root, const char *key,int ask)
{
int level;
int length = strlen(key);
int index;
struct TrieNode *pCrawl = root;
for (level = 0; level < length; level++)
{
index = CHAR_TO_INDEX(key[level]);
if(index == -1)
continue;
if (!pCrawl->children[index])
return 0;
pCrawl = pCrawl->children[index];
}
if(ask == 0)
return (pCrawl->repeat)*(pCrawl != NULL && pCrawl->isLeaf);
return (pCrawl->groupNumber)*(pCrawl != NULL && pCrawl->isLeaf);
}
结构三节点{
结构三节点*子项[字母表大小];
int重复;
整数组号;
int组名;
国际岛;
};
整数字符到整数索引(整数c){
如果(c>=97&&c=65&&c子项[索引])
返回0;
pCrawl=pCrawl->children[索引];
}
如果(ask==0)
返回(pCrawl->repeat)*(pCrawl!=NULL&&pCrawl->isLeaf);
返回(pCrawl->groupNumber)*(pCrawl!=NULL&&pCrawl->isLeaf);
}
但当我希望它返回struct trinode*时,它将返回错误的结果,如果它返回struct trinode*,它将得到运行时错误
struct TrieNode search(struct TrieNode *root, const char *key)
{
int level;
int length = strlen(key);
int index;
struct TrieNode *pCrawl = root;
for (level = 0; level < length; level++)
{
index = CHAR_TO_INDEX(key[level]);
if(index == -1)
continue;
if (!pCrawl->children[index])
return ;
pCrawl = pCrawl->children[index];
}
return *pCrawl;
}
结构三节点搜索(结构三节点*根,常量字符*键)
{
智力水平;
int length=strlen(键);
整数指数;
结构三节点*pCrawl=根;
用于(级别=0;级别<长度;级别++)
{
索引=字符到索引(键[级别]);
如果(索引==-1)
继续;
如果(!pCrawl->子项[索引])
返回;
pCrawl=pCrawl->children[索引];
}
返回*pCrawl;
}
或
结构三节点*搜索(结构三节点*根,常量字符*键)
{
智力水平;
int length=strlen(键);
整数指数;
结构三节点*pCrawl=根;
用于(级别=0;级别<长度;级别++)
{
索引=字符到索引(键[级别]);
如果(索引==-1)
继续;
如果(!pCrawl->子项[索引])
返回;
pCrawl=pCrawl->children[索引];
}
返回pCrawl;
}
返回一个struct triode
没有问题。但在当前示例中,您有:if(!pCrawl->children[index])return
这是错误的,因为在这种情况下,您没有返回结构三节点
,BTWc=c-65+32代码>-->c-='A'代码>什么是字母表大小?
struct TrieNode *search(struct TrieNode *root, const char *key)
{
int level;
int length = strlen(key);
int index;
struct TrieNode *pCrawl = root;
for (level = 0; level < length; level++)
{
index = CHAR_TO_INDEX(key[level]);
if(index == -1)
continue;
if (!pCrawl->children[index])
return ;
pCrawl = pCrawl->children[index];
}
return pCrawl;
}