173バイナリ検索ツリーのイテレータ
バイナリ検索ツリーのイテレータを実装します。あなたはイテレータが、バイナリ検索ツリーを初期化し、ルートノードを使用します。
()次の呼び出し、最低でも二分探索木の数を返します。
例:
反復子は、新しい新しいBSTIterator BSTIterator(ルート)=;
Iterator.next(); //戻り3。
Iterator.next(); //戻り7。
iterator.hasNext(); trueに//戻り
Iterator.next(); //戻り9。
イテレータ.hasNext(); trueに//戻り
Iterator.next(); //戻り15
iterator.hasNext(); trueに//戻り
Iterator.next(); //戻り20は
iterator.hasNext(); //返し偽
ヒント:
次の()とのhasNext()の動作時間の複雑さはO(1)であり、hは木の高さであるO(H)メモリを、使用します。
あなたが次に小さい番号の少なくとも一方の存在下で、次の()、BSTを呼び出すときは、その次の()の呼び出しであることを、常に有効であると仮定することができます。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class BSTIterator {
private TreeNode root;
private List<Integer> inOrder;
private Iterator<Integer> it;
//中序遍历
private void inorder(TreeNode root){
if(root!=null){
inorder(root.left);
inOrder.add(root.val);
inorder(root.right);
}
}
public BSTIterator(TreeNode root) {
this.root=root;
this.inOrder = new ArrayList<>();
inorder(this.root);
it=this.inOrder.iterator();
}
/** @return the next smallest number */
public int next() {
return this.it.next();
}
/** @return whether we have a next smallest number */
public boolean hasNext() {
if(this.it.hasNext())
return true;
return false;
}
}
/**
* 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();
*/