题目:
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
输入:root = [1,null,2,3]
输出:[1,3,2]
输入:root = []
输出:[]
输入:root = [1]
输出:[1]
提示:
树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100
解题思路:
二叉树的中序遍历是以先访问左孩子,然后访问根节点,最后访问右孩子的方式遍历这棵树,所以使用递归函数。定义 inorder(root) 表示当前遍历到 根节点的答案,按照定义,递归调用 inorder(root.left) 来遍历根节点的左子树,然后将根节点的值加入答案,再递归调用inorder(root.right) 来遍历根节点的右子树即可,递归终止的条件为碰到空节点。
代码展示(C语言)
void inorder(struct TreeNode * root,int* res,int *returnSize)
{
if(root)
{
inorder(root->left,res,returnSize);
res[(*returnSize)++] = root->val;
inorder(root->right,res,returnSize);
}
}
int* inorderTraversal(struct TreeNode* root, int* returnSize) {
int *res = malloc(sizeof(int) * 501);
*returnSize = 0;
inorder(root,res,returnSize);
return res;
}
时间复杂度:O(n)