/**
* 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().
*/
//栈定义
typedef struct Stack
{
struct TreeNode * data;
struct Stack *next;
}_Stack;
int* preorderTraversal(struct TreeNode* root, int* returnSize)
{
struct TreeNode* search;
struct Stack *top,*toptop,*end;
int *read = calloc(1,sizeof(int));
*returnSize = 0;
search = root;
//创建一个栈
top = end = (struct Stack *)malloc(sizeof(struct Stack));
top->data = NULL;
top->next = NULL;
//根节点入栈
top = (struct Stack *)malloc(sizeof(struct Stack));
top->data = root;
top->next = end;
if(root == NULL)
{
return root;
}
//栈非空
while (top != end)
{
read = (int *)realloc(read, sizeof(int)* ((*returnSize)+1));
read[(*returnSize)++] = search->val;
//右子树不为空
if (search->right != NULL)
{
//入栈
toptop = top;
top = (struct Stack *)malloc(sizeof(struct Stack));
top->next = toptop;
top->data = search->right;
}
//左子树不为空
if (search->left != NULL)
{
//左进
search = search->left;
}
else
{
toptop = top;
search = top->data;
top = top->next;
free(toptop);
}
}
return read;
}
用递归挺简单,不过这里用栈来实现。