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/