给定一个二叉树的根节点 root ,返回它的 中序 遍历。
/**
* 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 BinaryTreeSize(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
return BinaryTreeSize(root->left) + BinaryTreeSize(root->right) +1;
}
void _inorderTraversal(struct TreeNode* root, int* a,int* pi)
{
if(root == NULL)
{
return;
}
//左子树
_inorderTraversal(root->left, a,pi);
//根
a[(*pi)++] = root->val;
//右子树
_inorderTraversal(root->right, a,pi);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize)
{
//1.获取二叉树结点个数
int size = BinaryTreeSize(root);
//2.动态开辟数组
int* a = (int*)malloc(sizeof(int)*size);
//3.中序遍历,结点数据存入数组a中
//数组初始下标
int i = 0;
_inorderTraversal(root, a, &i);
*returnSize = size;
return a;
}