先将二叉树节点计算出来
int TreeSize(struct TreeNode* root)
{
if(root==NULL)
return 0;
return 1+TreeSize(root->left)+TreeSize(root->right);
}
如果想返回一个数组,那么前序遍历函数必须具有,数组的地址,下标,和被遍历的二叉树三个参数
void prevorder(struct TreeNode* root,int* retarr,int* pi)
{
if(root==NULL)
return ;
retarr[(*pi)++]=root->val;
prevorder(root->left,retarr,pi);
prevorder(root->right,retarr,pi);
}
因为下标是要被改变的,所以需要传址而不能传值
最后,创立一个节点数的数组,并且命名一个int i = 0 ,作为下标
int* preorderTraversal(struct TreeNode* root, int* returnSize){
int size = TreeSize(root);
int* retarr = (int*)malloc(sizeof(int)*size);
int i=0;
int* pi = &i;
prevorder(root,retarr,pi);
*returnSize = size;//这里是返回参数需要知晓数组大小
return retarr;
}