C - 在二叉搜索树中搜索数字

时间:2014-03-27 15:44:35

标签: c search recursion binary-search-tree

我正在尝试在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;
}

2 个答案:

答案 0 :(得分:2)

我真的不知道,为什么要覆盖root->leftroot->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应该会有所帮助。