Untitled

 avatar
unknown
plain_text
a month ago
1.7 kB
3
Indexable
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