import java.util.Stack; public class NthMinFromBinaryTree { public static void main(String[] args) { TreeNode root = new TreeNode(12); root.left = new TreeNode(8); root.left.left = new TreeNode(7); root.left.right = new TreeNode(10); root.left.right.left = new TreeNode(9); root.right = new TreeNode(20); root.right.left = new TreeNode(14); root.right.left.right = new TreeNode(15); root.right.right = new TreeNode(21); System.out.println(getNthMin(root, 1)); } public static int getNthMin(TreeNode root, int n) { Stack st = new Stack<>(); TreeNode current = root; while(current != null) { st.push(current); current = current.left; } while(!st.isEmpty() && n > 0) { current = st.pop(); n--; if (current.right != null) { TreeNode subCurrent = current.right; while(subCurrent != null) { st.push(subCurrent); subCurrent = subCurrent.left; } } } return current.value; } }