力扣——二叉搜索树迭代器

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

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

 

示例:

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

 

提示:

  • next() 和 hasNext() 操作的时间复杂度是 O(1),并使用 O(h) 内存,其中 是树的高度。
  • 你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 中至少存在一个下一个最小的数
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class BSTIterator {
    LinkedList<Integer>list=new LinkedList<>();
        public BSTIterator(TreeNode root) {
            inOrder(root);
        }
        void inOrder(TreeNode p) {
            if(p!=null) {
                inOrder(p.left);
                list.add(p.val);
                inOrder(p.right);
            }
        }
        /** @return the next smallest number */
        public int next() {
            if(hasNext())
                return (int)list.pollFirst();
            return -1;
        }
        
        /** @return whether we have a next smallest number */
        public boolean hasNext() {
            if(list.isEmpty())
                return false;
            return true;
        }
}

/**
 * Your BSTIterator object will be instantiated and called as such:
 * BSTIterator obj = new BSTIterator(root);
 * int param_1 = obj.next();
 * boolean param_2 = obj.hasNext();
 */

 

posted @ 2019-04-04 20:36  JAYPARK01  阅读(147)  评论(0编辑  收藏  举报