1 //Recursive 2 class Solution { 3 List<Integer> res = new ArrayList<>(); 4 public List<Integer> inorderTraversal(TreeNode root) { 5 if (root != null) { 6 inorderTraversal(root.left); 7 res.add(root.val); 8 inorderTraversal(root.right); 9 } 10 return res; 11 12 13 } 14 } 15 16 //Iterate 17 class Solution { 18 List<Integer> res = new ArrayList<>(); 19 public List<Integer> inorderTraversal(TreeNode root) { 20 if(root == null) return res; 21 Stack<TreeNode> stack = new Stack<>(); 22 stack.push(root); 23 Set<TreeNode> visited = new HashSet<>(); 24 while(!stack.empty()) { 25 TreeNode node = stack.pop(); 26 while(node.left != null && !visited.contains(node)) { 27 visited.add(node); 28 stack.push(node); 29 node = node.left; 30 } 31 res.add(node.val); 32 if(node.right != null) { 33 stack.push(node.right); 34 } 35 36 } 37 return res; 38 } 39 }