void *node_search(node_t *root, void *key) {
    node_t** curr = &root;
    int outcome;
    static int comparison = 0;
    while (*curr){
        outcome = strcmp(key, (*curr)->name);
        comparison++;
        printf("%d", outcome);
        if(outcome<0) {
            curr = &(*curr)->left;
        } else {
            if(outcome == 0){
               printf("%s---> ", key);
               printf("%d number of comparisions\n", comparison);
               comparison=0;
               return (*curr)->movie;
            }
            curr = &(*curr)->right;
        }

    }

           printf("%s---> ", key);
           printf("%d number of comparisions but NOT FOUND\n", comparison);
           comparison = 0;


    return (*curr);
}


当数据量很小时,它会找到我需要完美查找的内容

但是当使用相同的数据集但使用更大的数据集时,将无法打印出来

为什么是这样??

这是我插入树的插入

node_t *insert_node(node_t *root, node_t *new)
{
    node_t** curr = &root;
    while (*curr)
    {
        if (strcmp(new->name, (*curr)->name) < 0) {
            curr = &(*curr)->left;
        } else {
            curr = &(*curr)->right;
        }
    }

    *curr = new;

    return root;
}

最佳答案

insert_node中,您应该将root作为node_t **而不是node_t *传递。否则,如果您有一棵空树,则不会创建根节点。另外,请确保在root中将main初始化为NULL。

由于您将传递根指针的地址,因此insert_node无需返回任何内容。

void insert_node(node_t **root, node_t *new)
{
    node_t** curr = root;
    while (*curr)
    {
        if (strcmp(new->name, (*curr)->name) < 0) {
            curr = &(*curr)->left;
        } else {
            curr = &(*curr)->right;
        }
    }

    *curr = new;
}

int main()
{
    node_t *root = NULL;
    ...
    insert_node(&root, node1);
    insert_node(&root, node2);
    ...
}

关于c - 当数据变大时在c中的二叉树中搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32365739/

10-11 04:36
查看更多