В моем Xcode все работает нормально, так что кто-нибудь может сказать мне, в чем проблема?
Я проверил, и проблема в перераспределении пространства для стека, но я не понимаю ошибку .. Тестовый случай [1, null, 2,3], поэтому 1 - корень, 2 - правый ребенок 1, 3 - левый ребенок 2.Решение должно вернуть массив [1,2,3].
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*
**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
struct TreeNode* cercaRoot(struct TreeNode* root, struct TreeNode** stack, int* stackSize){
if (root->left){
*stackSize += 1;
stack = realloc(stack, (*stackSize)*sizeof(struct TreeNode*));
stack[*stackSize-1] = root;
return root->left;
} else if (root->right){
return root->right;
} else{
while(*stackSize){
root = stack[*stackSize-1];
if (root->right) {
*stackSize -= 1;
stack = realloc(stack, (*stackSize)*sizeof(struct TreeNode*));
return root->right;
} else {
*stackSize -= 1;
stack = realloc(stack, (*stackSize)*sizeof(struct TreeNode*));
}
}
return NULL;
}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
*returnSize = 0;
if (root==NULL) return NULL;
int* array = calloc(1, sizeof(int));
array[0]=root->val;
*returnSize += 1;
int stackSize = 0;
struct TreeNode** stack = calloc(1, sizeof(struct TreeNode*));
root = cercaRoot(root, stack, &stackSize);
while (root){
array = realloc(array, (*returnSize+1)*sizeof(int));
array[*returnSize]=root->val;
*returnSize+=1;
root = cercaRoot(root, stack, &stackSize);
}
//free(stack);
return array;
}