c - 删除和 DFS 功能无法正常工作

标签 c depth-first-search

我正在尝试创建一个树数据结构来存储有关奥运场馆的信息。我刚刚遇到了障碍,我意识到我的删除函数总是返回“Element Not Found”,并且我的 DFS 将找到正确的节点,但然后继续打印出树的右侧。

Tree * preorder_find(char * find_city, Tree* T)
{
    if(T)
    {

        //if(strcmp(T->Element->city, find_city) == 0)
        //return T;

        printf("%s, %s ... %d\n", T->Element->city, T->Element->country, 
                                                T->Element->year);

        if(strcmp(T->Element->city, find_city) != 0)
        {   
            preorder_find(find_city, T->Left);

            preorder_find(find_city, T->Right);
        }

    }


return T;

}



Tree* delete(char * venue, Tree* T)
{
    Tree* tmp_node;

    if(T==NULL)
        fprintf(stderr, "Element not Found\n");
    else
    if(strcmp(venue, T->Element->city) < 0)
        T->Left = delete(venue, T->Left);
    else
    if(strcmp(venue, T->Element->city) > 0)
        T->Right = delete(venue, T->Left);
    else
    if(T->Left && T->Right)
    {
        tmp_node = find_min(T->Right);
        T->Element = tmp_node->Element;
        T->Right = delete(T->Element->city, T->Right);
    }
    else
    {
        tmp_node = T;
        if(T->Left == NULL)
            T = T->Right;
        else if(T->Right == NULL)
            T = T->Left;
        free(tmp_node);
     }

     return T;
}

最佳答案

  1. 请尝试这个preorder_find()

    Tree * preorder_find(char * find_city, Tree* T) { 树*温度;

    if(T)
    {
    
        if(strcmp(T->Element->city, find_city) == 0)
            return T;
    
        printf("%s, %s ... %d\n", T->Element->city, T->Element->country, 
                T->Element->year);
    
        if(strcmp(T->Element->city, find_city) != 0)
        {   
            if ((temp = preorder_find(find_city, T->Left))
                    || (temp = preorder_find(find_city, T->Right)))
                return temp;
        }
    
    }
    
    
    return T;
    

    }

  2. my delete function always returns "Element Not Found"

    根据您的delete(),这意味着delete()的参数T始终为NULL .

关于c - 删除和 DFS 功能无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22060093/

相关文章:

c - OpenSSL X509_Sign "invalid digital signature"

c - C中并发数据结构的内存消耗

algorithm - 重光分解问题

algorithm - 为什么深度优先搜索声称具有空间效率?

c - c中的阿姆斯特朗数程序输出错误

c - 合并目录中的txt

javascript - 使用深度优先搜索算法的无限循环错误

java - 增加堆栈大小是否被认为是一种不好的做法?

java - 算法问题的解决方案输出略有不正确。怎么了?

c - waitpid 与 WUNTRACED