实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。

调用 next() 将返回二叉搜索树中的下一个最小的数。

示例:

288,二叉搜索树迭代器_编程开发

BSTIterator iterator = new BSTIterator(root); iterator.next();    // 返回 3 iterator.next();    // 返回 7 iterator.hasNext(); // 返回 true iterator.next();    // 返回 9 iterator.hasNext(); // 返回 true iterator.next();    // 返回 15 iterator.hasNext(); // 返回 true iterator.next();    // 返回 20 iterator.hasNext(); // 返回 false

答案:

 1class BSTIterator {
2
3    private Stack<TreeNode> stack = new Stack<TreeNode>();
4
5    public BSTIterator(TreeNode root) {
6        pushAll(root);
7    }
8
9    public boolean hasNext() {
10        return !stack.isEmpty();
11    }
12
13    public int next() {
14        TreeNode tmpNode = stack.pop();
15        pushAll(tmpNode.right);
16        return tmpNode.val;
17    }
18
19    private void pushAll(TreeNode node) {
20        for (; node != null; stack.push(node), node = node.left) ;
21    }
22}

解析:
如果对二叉树的dfs(深度优先搜索)比较熟悉的话,这题很容易理解。代码很简单,就不再过多介绍。