一、题目描述

给定一个二叉树的根节点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
/**
* 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) {
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
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
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);
}
};

描述文字
© 2024 mengchao666 开心地使用 Stellar 主题,星际地球第
收集了 62 颗星星 ✧ 共 83.3k 粒星尘,好像写完一本 鲁迅 的《呐喊》了啊