Я попытался написать функцию для перемещения по двоичному дереву в порядке и поместить его элементы в массив целых чисел in-order.I знаю, что этот фрагмент кода содержит некоторые плохие методы но на самом деле я задаюсь вопросом, почему моя функция не создает цельный массив целых чисел. Например, даже если моя функция может найти размер, необходимый для хранения всех элементов bst, он не может правильно помещать эти элементы. Иногда он помещает только два узла, а иногда только корень.Трассировка в порядке в двоичном дереве
Я не вижу причин, чтобы какая-либо главная функция здесь, так как я использовал бы ее только для печати элементов этого массива.
Моя функция, глобальный блок variabless и typedef для TreeNode;
typedef struct TreeNode{
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
int ctr = 0;
int size = 0;
int* inorder(TreeNode *root, int* arr){
if(ctr==0) /*if first call to this function*/
arr = malloc(size*sizeof(int)) ;
ctr++ ;
if(root){
if(!root->left && !root->right){
arr = realloc(arr, ++size*sizeof(int)) ;
arr[size-1] = root->val ;
}
else if(!root->left&&root->right){
arr = realloc(arr, ++size*sizeof(int)) ;
arr[size-1] = root->val ;
arr=inorder(root->right,arr) ;
}
else if(!root->right&&root->left){
arr=inorder(root->left,arr) ;
arr = realloc(arr, ++size*sizeof(int)) ;
arr[size-1] = root->val ;
}
else{
arr=inorder(root->left,arr) ;
arr = realloc(arr, ++size*sizeof(int)) ;
arr[size-1] = root->val ;
arr=inorder(root->right,arr) ;
}
return arr ;
}
else
return arr ;
}