【问题标题】:C - Searching for a number in a binary search treeC - 在二叉搜索树中搜索一个数字
【发布时间】:2014-05-06 17:16:06
【问题描述】:

我正在尝试在 BST 中搜索一个数字,并且该功能始终打印“YES”(找到数字)

这是我在 main 中的代码

    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;
}

【问题讨论】:

  • 你的输入是什么?结构是如何使用的?
  • 你为什么要在搜索中重新分配东西?
  • 迭代方法更高效,与递归方法一样简单。

标签: c search recursion binary-search-tree


【解决方案1】:

我真的不明白,为什么要覆盖 root-&gt;leftroot-&gt;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 */
}

【讨论】:

    【解决方案2】:

    你总是返回永远不会为 NULL 的根。用简单的returns 替换root-&gt;left =root-&gt;right = 应该会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多