一、题目描述
给定一个二叉树的根节点root,返回它的中序遍历 。
示例 1:

输入:root = [1,null,2,3]
输出:[1,3,2]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
提示:
树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
二、C语言题解
递归算法很简单,只需要按照左右根的顺序递归即可,代码如下:
不过需要注意的是,leetcode中尽量最好不要使用全局变量吧,因为leetcode网站的题目,所有的用例是共享全局变量的,也就是第一个用例执行完后,第二个用例会继承第一个用例执行后的全局变量的值,导致后续的用例执行失败
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
int* inorderTraversal(struct TreeNode* root, int* returnSize) { int* res = (int *)malloc(100 * sizeof(int)); if (res == NULL) { return NULL; } *returnSize = 0;
traverse(root, res, returnSize); return res; }
void traverse(struct TreeNode* root, int* res, int* returnSize) { if (root == NULL) { return; }
traverse(root->left, res, returnSize); res[*returnSize] = root->val; (*returnSize)++; traverse(root->right, res, returnSize); }
|
迭代方法:
三、C++题解
递归方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
class Solution { public: vector<int> inorderTraversal(TreeNode* root) { vector<int> res; traverse(root, res); return res; }
void traverse(TreeNode* root, vector<int> &res) { if (root == nullptr) { return; } traverse(root->left, res); res.push_back(root->val); traverse(root->right, res); } };
|