其他分享
首页 > 其他分享> > 288,二叉搜索树迭代器

288,二叉搜索树迭代器

作者:互联网

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

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

示例:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

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(深度优先搜索)比较熟悉的话,这题很容易理解。代码很简单,就不再过多介绍。

标签:返回,node,BSTIterator,hasNext,迭代,iterator,next,288,二叉
来源: https://blog.51cto.com/u_4774266/2902482