Solution to Binary Tree Inorder Traversal problem.

class Solution {
    
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        
        recursiveInorder(root, result);
        
        return result;
    }    
    
    private void  recursiveInorder(TreeNode node, List<Integer> result) {
        if(node == null)
            return;
        
        recursiveInorder(node.left, result);
        result.add(node.val);
        recursiveInorder(node.right, result);
    }
}    

Iterative Solution

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<Integer>();
        
        Stack<TreeNode> stack = new Stack<>();
        TreeNode cur = root;
        while(cur != null || !stack.isEmpty()) {
            traverseToTheLeftEnd(cur, stack);
            
            cur = stack.pop();
            result.add(cur.val);
            
            cur = cur.right;
        }
        
        return result;
    }
    
    private void traverseToTheLeftEnd(TreeNode cur, Stack stack) {
        while(cur != null) {
            stack.push(cur);
            cur = cur.left;
        }
    }
}