# 二叉树的中序遍历 ## 题目 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root = [] 输出:[] 示例 3: 输入:root = [1] 输出:[1] 提示: 树中节点数目在范围 [0, 100] 内 -100 <= Node.val <= 100 进阶: 递归算法很简单,你可以通过迭代算法完成吗? ## 思路 - 递归 - 迭代 ## 代码 - 递归 ```java /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List inorderTraversal(TreeNode root) { // Init: Res List res = new ArrayList<>(); inorder(root, res); return res; } public void inorder(TreeNode root, List res) { if (root == null) { return; } inorder(root.left, res); res.add(root.val); inorder(root.right, res); } } ``` - 迭代 ```java /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List inorderTraversal(TreeNode root) { // Init: stack, res Deque stack = new LinkedList<>(); List res = new ArrayList<>(); TreeNode cur = root; // Traverse 1: Judge while (cur != null || stack.size() > 0) { // Traverse 2: Add while (cur != null) { stack.push(cur); cur = cur.left; } cur = stack.peek(); stack.pop(); res.add(cur.val); cur = cur.right; } return res; } } ```