173. Binary Search Tree Iterator

Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.

Calling next() will return the next smallest number in the BST.

Note: next() and hasNext() should run in average O(1) time and uses O(h) memory, where h is the height of the tree.

题目含义:给定一个二叉搜索树,实现next() 方法来返回下一个最小值, hasNext() 返回是否有下一个最小值

 

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

 

posted @ 2017-10-23 08:00  daniel456  阅读(104)  评论(0编辑  收藏  举报