gpt4 book ai didi

c - 在树中查找函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:17 24 4
gpt4 key购买 nike

我有一个函数有问题,该函数应该找到树中具有相同名称的所有节点,我必须保存找到的每个节点的路径。

我已经使用基于深度优先搜索的算法实现了我的功能,但问题是保存的路径不完整。例如,节点位于路径 /dir0rid/dir0rid/dir1rid/file1 中,函数仅保存路径 /dir1rid/file1

这是我的功能:

void find(node_t *Fs) {
int i = 0;

while (i < 1024) {
if (Fs->figli[i] != NULL) {
if (Fs->figli[i]->nome_file == NULL) {
i++;
} else {
if (strcmp(Fs->figli[i]->nome_file, "DELETED") != 0) {
if (Fs->figli[i]->type == 1) {
i++;
} else {
finded[j_index] = Fs->figli[i];
j_index++;

find(Fs->figli[i]);
i++;
j_index--;
finded[j_index] = NULL;
}
} else {
i++;
}
}
} else {
i++;
}
}

if (hash_search(Fs, file_cercato) != NULL) {
int j = 0;
percorso[f_index][0] = '\0';

while (finded[j] != NULL) {
strcat(percorso[f_index], "/");
strcat(percorso[f_index], finded[j]->nome_file);
j++;
}

strcat(percorso[f_index], "/");
strcat(percorso[f_index], file_cercato);
f_index++;
percorso[f_index][0] = '\0';
}
return;
}

最佳答案

循环的简化版本(我省略了 hashstuff):


void find2 (node_t* Fs){

int i ;

for(i=0; i < 1024; i++){
if (Fs->figli[i] == NULL) continue;
if(Fs->figli[i]->nome_file == NULL) continue;
if(!strcmp(Fs->figli[i]->nome_file,"DELETED")) continue;
if(Fs->figli[i]->type==1) continue;
finded[j_index]=Fs->figli[i];

j_index++;
find(Fs->figli[i]);
j_index--; // <<--

finded[j_index]=NULL; // <<--
}
}

现在,我不明白你的逻辑,但我认为 j_index--; 是错误的。它应该可能放在之后 finded[j_index]=NULL;

关于c - 在树中查找函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46014101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com