バイナリツリーを順番にトラバースし、そのアイテムを順番に整数の配列に入れる関数を作成しようとしました。このコードには悪い習慣がいくつか含まれていますしかし、私は実際に私の関数が目的の整数配列を作成しない理由は実際にはなぜですか。私の関数は、bstのすべての項目を保持するために必要なサイズを見つけることができる場合でも、これらの項目を適切に置くことはできません。ルートのみ。バイナリツリーの順序通りのトラバース
ここで主要な機能を置く理由はありません。なぜなら、私はその配列の要素を印刷するためだけに使うからです。
TreeNodeのMy関数、グローバルバリアブル、およびtypedefブロック。
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 ;
}