94. 二叉树的中序遍历 - 力扣(LeetCode)(点击前面链接即可查看题目)
一、题目
给定一个二叉树的根节点
root
,返回 它的 中序 遍历 。示例 1:
输入:root = [1,null,2,3] 输出:[1,3,2]示例 2:
输入:root = [] 输出:[]示例 3:
输入:root = [1] 输出:[1]提示:
- 树中节点数目在范围
[0, 100]
内-100 <= Node.val <= 100
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
二、解题思路以及代码
注:
1.本题中returnSize,指的是二叉树的结点数
2.返回的数组必须是malloc开辟的
注意要点与前序遍历相同,请参考二叉树的前序遍历 - 力扣(LeetCode)C语言-CSDN博客
/**
* 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().
*/
void inBTree(int* pa, struct TreeNode* root,int* pi)
{
if(NULL == root)
{
return;
}
inBTree(pa, root->left, pi);
pa[*pi] = root->val;
(*pi)++;
inBTree(pa, root->right, pi);
}
int TreeSize1(struct TreeNode* root)
{
return root == NULL? 0:TreeSize1(root->left) + TreeSize1(root->right) + 1;
}
int* inorderTraversal(struct TreeNode* root, int* returnSize)
{
*returnSize= TreeSize1(root);
int* a = (int*)malloc(*returnSize * sizeof(int));
int i = 0;
inBTree(a,root,&i);
return a;
}