给定一个高和一个低,这个函数的目的是找出相等的或介于两者之间的数字量。我使用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/