I am coding a range function for a BST, can some one help me with what I'm doing wrong here?
Code:
typedef int data_t;
typedef struct bnode bstree_t;

struct bnode 
{
	data_t data;
	bstree_t *left; 
	bstree_t *right;	
};
/*aux functions*/
int cmp (data_t x, data_t y)
{
	if (x < y)
		return-1;
	else if (x > y)
		return 1;
	else
		return 0;
}

int within_range (data_t value, data_t low, data_t hi)
{
	if (((cmp (value, low)) >= 0) && ((cmp (value, hi)) <= 0))
		return 1;
	else
		return 0;
}
/*range function*/
int in_range (bstree_t *tree, data_t low, data_t hi) 
{	
	if (tree == NULL)
	{
		return 0;
	}
	else
	{
		if (within_range (tree->data, low, hi))
		{
			int counter = 1;
			counter += in_range (tree->left, low, hi); 
			counter += in_range (tree->right, low, hi);
			return counter;
		}
		else 
		{
			if (cmp (tree->data,  low) > 0)
			{
				in_range (tree->left, low, hi);
			}
			else if (cmp (tree->data, hi) < 0)
			{
				in_range (tree->right, low, hi);		
			}
		}
	}
}