c - 在树中查找函数

标签 c function depth-first-search

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

我已经使用基于深度优先搜索的算法实现了我的功能,但问题是保存的路径不完整。例如,节点位于路径 /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/

相关文章:

c++ - 如何在 MPI 中 sleep

Prolog 图深度优先搜索

c - 将二维数组传递给 C 中的函数

c - 通过引用其他函数传递缓冲区

c - 使用 DFS 求解迷宫

algorithm - 使用 DFS 在有向图中查找最长循环

c - 为什么 OCaml 中的 while 循环不能按预期工作?

C 比较 'x < 0' 其中 'x' 的类型是任意的,即可能是无符号的

C: 不丢失空格的文件解析

python - 如何编写一个添加所有参数的 python 函数?