给定一个高和一个低,这个函数的目的是找出相等的或介于两者之间的数字量。我使用5和10作为我的低和高,应该得到4的回报结果。因为我使用递归,所以我使用一个静态变量来跟踪。但是结果我还是得1分。为什么?
在我的测试函数中:

int main()
{
  int i;

  int a[] = {8, 2, 7, 9, 11, 3, 2, 6};


  BST_PTR t = bst_create();

  for(i=0; i<8; i++)
    bst_insert(t, a[i]);

    printf("%d\n", bst_num_in_range(t,5,10)); <----- **calls the function here**
  //rest of tests here

int bst_num_in_range(BST_PTR t, int low, int hi)
{
    static int x = 0;

    if ( NULL == t->root)
        return 0;

    return num_in_range_helper(t->root, low, hi, x);
}

int num_in_range_helper(NODE *r , int low, int hi, static int x)
{
    if (r == NULL)
       return 0;

    if (low < r->val)
       num_in_range_helper(r->left, low, hi, x);

    if ( low <= r->val && hi >= r->val )
        x++;

    if (hi > r->val)
        num_in_range_helper(r->right, low, hi, x);

    return x;
}

最佳答案

在这两个函数中,static关键字不会使x成为同一个变量。您需要在每次调用后将返回值赋给x,即尝试如下操作

int bst_num_in_range(BST_PTR t, int low, int hi)
{
    if ( NULL == t->root)
        return 0;

    return num_in_range_helper(t->root, low, hi);
}

int num_in_range_helper(NODE *r , int low, int hi)
{
    if (r == NULL)
        return 0;

    int x = 0;

    if (low < r->val)
        x += num_in_range_helper(r->left, low, hi);

    if ( low <= r->val && hi >= r->val )
        x++;

    if (hi > r->val)
        x += num_in_range_helper(r->right, low, hi);

    return x;
}

编辑:您也不需要将当前x发送给辅助对象,只需向辅助对象请求两个子树中的顶点数,添加它们并返回当前子树中的总数

关于c - 在BST(C)中查找从低到高范围内的整数数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20474740/

10-12 03:41