/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型一维数组
* @return int* returnSize 返回数组行数
*/
typedef struct Stack {
struct TreeNode* data[1000];
int size;
} stack;
stack* init_stack() {
stack* my_stack = (stack*) malloc(sizeof(stack));
if (my_stack == NULL) {
return NULL;
}
for (int i = 0; i < 1000; i++) {
my_stack->data[i] = NULL;
}
my_stack->size = 0;
return my_stack;
}
void push_stack(stack* my_stack, struct TreeNode* value) {
if (my_stack == NULL) {
return;
}
my_stack->data[my_stack->size] = value;
my_stack->size++;
}
struct TreeNode* pop_stack(stack* my_stack) {
if (my_stack == NULL || my_stack->size == 0) {
return NULL;
}
struct TreeNode* Front = my_stack->data[my_stack->size - 1];
my_stack->size--;
return Front;
}
bool IsEmpty(stack* my_stack) {
if (my_stack == NULL || my_stack->size == 0) {
return true;
}
return false;
}
void inorder(struct TreeNode* root, int* returnSize, int* returnArry) {
struct TreeNode* node = root;
stack* my_stack = init_stack();
while (true) {
if (node != NULL) {
push_stack(my_stack, node);
node = node->left;
} else if (IsEmpty(my_stack)) {
return;
} else {
node = pop_stack(my_stack);
returnArry[(*returnSize)++] = node->val;
node = node->right;
}
}
}
int* inorderTraversal(struct TreeNode* root, int* returnSize) {
// write code here
if (root == NULL) {
return NULL;
}
*returnSize = 0;
int* returnArry = malloc(sizeof(int) * 1000);
inorder(root, returnSize, returnArry);
return returnArry;
}