1.题目描述
给定一个二叉树的根节点 root
,返回 它的 中序 遍历 。
2.示例
示例 1:
输入:root = [1,null,2,3] 输出:[1,3,2]
示例 2:
输入:root = [] 输出:[]
示例 3:
输入:root = [1] 输出:[1]
3.思路分析
采用递归思路:
在inorderTraversal函数中,已知根结点和数组长度,需返回数组,那么我们就需要动态建立数组rearray,以及为returnSize赋初值。再调用函数mid进行中序遍历,最终返回数组。在mid函数调用中,先判断根节点是否存在,如果不存在,则返回;如果存在,则先访问根的左孩子,再将根的值存入数组,最后访问根的右孩子。
在mid函数调用中,先判断根节点是否存在,如果不存在,则返回;如果存在,则先访问根的左孩子,再将根的值存入数组,最后访问根的右孩子。
4.代码展示
int* inorderTraversal(struct TreeNode* root, int* returnSize) {
int* rearray = (int*)malloc(sizeof(int)*100);
*returnSize = 0;
mid(root,rearray,returnSize);
return rearray;
}
void mid(struct TreeNode* root,int* rearray,int* returnSize){
if(!root)
return;
mid(root->left,rearray,returnSize);
rearray[(*returnSize)++]=root->val;
mid(root->right,rearray,returnSize);
}
5.时间复杂度和空间复杂度
时间复杂度:O(n)
空间复杂度:O(n)