给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [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().
*/
int GetTreeSize(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
else
{
return GetTreeSize(root->left)
+GetTreeSize(root->right)+1;
}
}
void _preorderTraversal(struct TreeNode* root, int* array,int* pIndex)
{
if(root==NULL)
return;
array[*pIndex]=root->val;
(*pIndex)++;
_preorderTraversal(root->left,array,pIndex);
_preorderTraversal(root->right,array,pIndex);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize)
{
*returnSize=GetTreeSize(root);
int* array=(int*)malloc((*returnSize)*sizeof(int));
int index=0;
_preorderTraversal(root,array,&index);
return array;
}