本文最后更新于:2022年9月6日 晚上
给定一个二叉树的根节点 root
,返回它的 中序 遍历。
示例 1:
示例 2:
示例 3:
示例 4:
示例 5:
提示:
- 树中节点数目在范围
[0, 100]
内
-100 <= Node.val <= 100
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
Solution
参考 @z1m 、[144 二叉树的前序遍历]、[145 二叉树的后序遍历]
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; inorder(root, res); return res; } private: void inorder(TreeNode* root, vector<int>& res){ if(root){ inorder(root->left, res); res.push_back(root->val); inorder(root->right, res); } } };
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public: vector<int> inorderTraversal(TreeNode* root) { vector<int> res; stack<TreeNode*> stack; TreeNode* node = root; while(node!=nullptr || !stack.empty()){ while(node){ stack.push(node); node = node->left; } node = stack.top(); stack.pop(); res.push_back(node->val); node = node->right; } return res; } };
|
java
| class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); inorder(root, result); return result; }
private void inorder(TreeNode root, List<Integer> rec) { if (root != null) { inorder(root.left, rec); rec.add(root.val); inorder(root.right, rec); } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); Deque<TreeNode> stack = new LinkedList<>(); TreeNode node = root; while (node != null || !stack.isEmpty()) { while (node != null) { stack.push(node); node = node.left; } node = stack.pop(); result.add(node.val); node = node.right; } return result; } }
|