力扣——二叉搜索树迭代器
作者:互联网
实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。
调用 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) 内存,其中 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(); */
标签:BSTIterator,hasNext,迭代,iterator,TreeNode,next,力扣,return,二叉 来源: https://www.cnblogs.com/JAYPARK/p/10656961.html