题目描述
给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,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* inorderTraversal(struct TreeNode* root, int* returnSize){
*returnSize = 0;
if(!root)
return NULL;
int ts = treesize(root);
int* p = (int *)malloc(sizeof(int)*ts);
midsort(root, p, returnSize);
return p;
}
int treesize(struct TreeNode* t) //递归求出树的结点数
{
if(!t)
return 0;
return treesize(t->left) + treesize(t->right) +1;
}
void midsort(struct TreeNode* root, int* num, int* returnSize)
{
if(!root)
return NULL;
midsort(root->left, num, returnSize); //遍历左子树
num[(*returnSize)++] = root->val; //将此结点的值存入数组
midsort(root->right, num, returnSize); //遍历右子树
}
注:returnSize在函数返回前必须赋值,否则当传入空树时会发生load of null pointer of type ‘const int’ 错误。