Угадывая все недостающие детали, я думаю, вы бы сделали что-то вроде:
int In_order(Struct_Node * node, int *array){
int count = 0;
if (node->left) {
count += In_order(node->left, array);
}
array[count++] = node->data; // whatever it is you're storing
if (node->right) {
count += In_order(node->right, array+count);
}
return count;
}
Ключевым моментом является то, что вы передаете обновленный указатель на рекурсивный вызов RHS, и ваше возвращаемое значение равно 1 + LHS return + RHS return
Если вы не можете использовать int в качестве счетчика (что на самом деле глупо, потому что это самый ясный способ выразить это), вы можете сделать:
int In_order(Struct_Node * node, const int *array){
int *tptr = array;
if (node->left) {
tptr += In_order(node->left, array);
}
*tptr++ = node->data; // whatever it is you're storing
if (node->right) {
tptr += In_order(node->right, tptr);
}
return tptr-array;
}
Если вы хотите немного "сойти с ума" и избегать каких-либо локальных переменных, кроме аргументов функции, вы можете изменить тип возвращаемого значения на указатель на текущий рабочий конец массива (который фактически является размером массива также) и делаем:
int *In_order(const Struct_Node * const node, int * const result) {
return !node ? result :
In_order(node->right, &(*In_order(node->left, result) = node->value)+1);
}
Хотя, честно говоря, это ужасный код (я даже не уверен на 100%, что он хорошо определен!), И я действительно надеюсь, что они не искали такого решения! *