# 二叉树的中序遍历

给定一个二叉树的根节点 root ,返回它的 中序 遍历。

示例 1:

输入:root = [1,null,2,3]
输出:
[1,3,2]

示例 2:

输入:root = []
输出:
[]

示例 3:

输入:root = [1]
输出:
[1]

示例 4:

输入:root = [1,2]
输出:
[2,1]

示例 5:

输入:root = [1,null,2]
输出:
[1,2]

提示:

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

以下错误的选项是?

## aop ### before ```c #include using namespace std; 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) {} }; ``` ### after ```c ``` ## 答案 ```c class Solution { public: vector inorderTraversal(TreeNode *root) { vector result; return InorderTraversal(root, result); } private: vector InorderTraversal(TreeNode *root, vector &result) { if (root == NULL) return result; InorderTraversal(root->left, result); InorderTraversal(root->right, result); result.push_back(root->val); return result; } }; ``` ## 选项 ### A ```c class Solution { public: vector inorderTraversal(TreeNode *root) { vector res; stack s; while (root != nullptr || !s.empty()) { if (root != nullptr) { s.push(root); root = root->left; } else { auto cur = s.top(); s.pop(); res.emplace_back(cur->val); root = cur->right; } } return res; } }; ``` ### B ```c class Solution { public: vector inorderTraversal(TreeNode *root) { vector ret; stack toTraversal; while (root != NULL || !toTraversal.empty()) { while (root != NULL) { toTraversal.push(root); root = root->left; } root = toTraversal.top(); toTraversal.pop(); ret.push_back(root->val); root = root->right; } return ret; } }; ``` ### C ```c class Solution { private: void rec(TreeNode *root, vector &ret) { if (root != NULL) { rec(root->left, ret); ret.push_back(root->val); rec(root->right, ret); } } public: vector postorderTraversal(TreeNode *root) { vector ret; rec(root, ret); return ret; } }; ```