void recursion(struct TreeNode* root,int* returnSize,int* arr){
if (!root)
return;
arr[(*returnSize)++]=root->val;
recursion(root->left,returnSize,arr);
recursion(root->right,returnSize,arr);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize){
int* arr=(int*)calloc(1000,sizeof(int));
*returnSize=0;
recursion(root,returnSize,arr);
return arr;
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
int* res = malloc(sizeof(int) * 2000);
*returnSize = 0;
if (root == NULL) {
return res;
}
struct TreeNode* stk[2000];
struct TreeNode* node = root;
int stk_top = 0;
while (stk_top > 0 || node != NULL) {
while (node != NULL) {
res[(*returnSize)++] = node->val;
stk[stk_top++] = node;
node = node->left;
}
node = stk[--stk_top];
node = node->right;
}
return res;
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
int* res = malloc(sizeof(int) * 2000);
*returnSize = 0;
if (root == NULL) {
return res;
}
struct TreeNode *p1 = root, *p2 = NULL;
while (p1 != NULL) {
p2 = p1->left;
if (p2 != NULL) {
while (p2->right != NULL && p2->right != p1) {
p2 = p2->right;
}
if (p2->right == NULL) {
res[(*returnSize)++] = p1->val;
p2->right = p1;
p1 = p1->left;
continue;
} else {
p2->right = NULL;
}
} else {
res[(*returnSize)++] = p1->val;
}
p1 = p1->right;
}
return res;
}