public static ArrayList<Integer> inorderTraversalIterative(TreeNode root) {
		ArrayList<Integer> inorder = new ArrayList<Integer>();
        Stack<TreeNode> stack = new Stack<TreeNode>();
        
        if(root == null) {
            return inorder;
        }
        
        while(!stack.isEmpty() || root != null) {
        	if(root != null) {
        		stack.push(root);
        		root = root.left;
        	} else {
        		root = stack.pop();
        		inorder.add(root.val);
        		root = root.right;
        	}
        }
        
        return inorder;
	}