给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
要求:1.返回二叉树先序遍历,保存在数组中返回,数组是malloc出来的
2.函数调用结束,能够在外面获取结点个数。
/**
* 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;
}
//二叉树的先序遍历
void _preorderTraversal(struct TreeNode* root, int* a, int* pi)
{
if(root == NULL)
{
return;
}
a[(*pi)++] = root->val;
_preorderTraversal(root->left, a, pi);
_preorderTraversal(root->right, a,pi);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize){
int size = TreeSize(root);
//动态开辟数组a,存放先序遍历的数据,在函数外部由调用者进行释放
int* a = (int*)malloc(sizeof(int*)*size);
int i = 0;
//注意这里传入的是i的地址
_preorderTraversal(root,a,&i);
//returnSize是输出型参数
*returnSize = size;
return a;
}