通过一个优先队列进行存储数据 然后每一次读数据都是输出第一个结点
class BSTIterator { Queuels = new PriorityQueue(); public BSTIterator(TreeNode root) { dfs(root); } public void dfs(TreeNode root) { if(root==null) {return ;} ls.add(root.val); if(root.left!=null)dfs(root.left); if(root.right!=null)dfs(root.right); } /** @return the next smallest number */ public int next() { return ls.poll(); } /** @return whether we have a next smallest number */ public boolean hasNext() { if(ls.size() == 0) return false; else return true; } }
中序遍历+栈模拟
class BSTIterator { Stack stack = new Stack(); public BSTIterator(TreeNode root) { stack.clear(); while(root!=null) { stack.add(root); root = root.left; } } /** @return the next smallest number */ public int next() { TreeNode p = stack.pop(); int res = p .val; p = p.right; while(p!=null) { stack.add(p); p = p.left; } return res; } /** @return whether we have a next smallest number */ public boolean hasNext() { return !stack.isEmpty(); } }