题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
这道题的难点在于,前序遍历一遍之后需要将数值存在数组里,returnsize就是数组的大小
所以我们先构建一个函数来计算节点的个数
然后我们前序遍历,遍历的同时将数值存到数组里
最后再函数里先保存数组的大小,开辟一个数组,用i来控制数组往后走,为了防止局部变量出函数销毁,我们取i的地址
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int TreeSize(struct TreeNode* root)
{
return root==NULL?0:TreeSize(root->left)+TreeSize(root->right)+1;
}
//int i=0;
void preorder(struct TreeNode*root,int *a,int *i)
{
if(root==NULL)
return;
a[(*i)++]=root->val;
preorder(root->left,a,i);
preorder(root->right,a,i);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
int n=TreeSize(root);
int *a=(int*)malloc(sizeof(int)*n);
*returnSize=n;
int i=0;
preorder(root,a,&i);
return a;
}