我正在尝试在BST中搜索一个数字并且该函数始终打印“是”(已找到数字)
以下是我在主要代码中的代码
printf("Enter a number to search: ");
scanf("%d", &num);
if (search(root, num) != NULL) {
printf("YES\n");
}
else {
printf("NO\n");
}
这是我的搜索功能
BST* search(BST* root, int value) {
if( root == NULL) {
return NULL;
}
else if(value < root->value) {
root->left = search(root->left, value);
}
else if(value > root->value) {
root->right = search(root->right, value);
}
return root;
}
答案 0 :(得分:2)
我真的不知道,为什么要覆盖root->left
或root->right
。我认为您的search()
函数应如下所示:
BST *search(BST *root, int value)
{
if (root == NULL)
return NULL;
if (value == root->value)
return root;
if (value < root->value)
return search(root->left, value);
if (value > root->value)
return search(root->right, value);
return NULL; /* not actually reached */
}
答案 1 :(得分:1)
总是返回永远不会为NULL的根。用简单的root->left =
替换root->right =
和return
应该会有所帮助。