Untitled
import java.util.ArrayList; import java.util.List; class TreeNode { int val; TreeNode left, right; TreeNode(int val) { this.val = val; this.left = null; this.right = null; } } public class BSTIteratorRecursive { private List<Integer> nodes; private int currentIndex; public BSTIteratorRecursive(TreeNode root) { nodes = new ArrayList<>(); currentIndex = 0; inorderTraversal(root, nodes); // Perform recursive inorder traversal. } // Inorder traversal to fill the list. private void inorderTraversal(TreeNode node, List<Integer> nodes) { if (node == null) return; // Traverse left subtree. inorderTraversal(node.left, nodes); // Visit current node. nodes.add(node.val); // Traverse right subtree. inorderTraversal(node.right, nodes); } // Check if there is a next element. public boolean hasNext() { return currentIndex < nodes.size(); } // Get the next element. public int next() { return nodes.get(currentIndex++); } public static void main(String[] args) { // Example usage: TreeNode root = new TreeNode(7); root.left = new TreeNode(3); root.right = new TreeNode(15); root.right.left = new TreeNode(9); root.right.right = new TreeNode(20); BSTIteratorRecursive iterator = new BSTIteratorRecursive(root); while (iterator.hasNext()) { System.out.print(iterator.next() + " "); // Output: 3 7 9 15 20 } } }
Leave a Comment