バイナリ検索ツリーイテレータクラスBSTIteratorを実装します。これは、バイナリ検索ツリー(BST)を中間の順序でトラバースするイテレータを表します
。BSTIterator(TreeNodeルート)は、BSTIteratorクラスのオブジェクトを初期化します。BSTのルートノードルートは、コンストラクターの一部として指定されます。ポインターは、BSTに存在しない番号に初期化する必要があり、その番号はBSTのどの要素よりも小さいです。
boolean hasNext()ポインタの右側を通過する数値がある場合はtrueを返し、そうでない場合はfalseを返します。
int next()はポインタを右に移動し、ポインタの数値を返します。
ポインタはBSTに存在しない数値に初期化されるため、next()を最初に呼び出すと、BST内の最小の要素が返されることに注意してください。
next()呼び出しは常に有効であると想定できます。つまり、next()が呼び出されると、BSTの順序どおりのトラバーサルに少なくとも1つの次の番号があります。
例:
輸出入
[“ BSTIterator”、“ next”、“ next”、“ hasNext”、“ next”、“ hasNext”、“ next”、“ hasNext”、“ next”、“ hasNext”]
[[[ 7、3、15 、null、null、
9、20 ]]、[]、[]、[]、[]、[]、[]、[]、[]、[]]これ出
[null、3、7 、true、9、 true、15、true、20、false]
BSTIteratorを解釈するbSTIterator = new BSTIterator([7、3、15、null、null、
9、20 ]); bSTIterator.next(); // 3を
返すbSTIterator.next(); // 7を
返すbSTIterator.hasNext(); // Trueを
返すbSTIterator.next(); // 9を
返すbSTIterator.hasNext(); // Trueを
返すbSTIterator.next(); // 15を
返すbSTIterator.hasNext(); // Trueを
返すbSTIterator.next(); // 20を
返しますbSTIterator.hasNext(); // Falseを返します
促す:
ツリー内のノードの数は、[
1、105 ] 0 <= Node.val <= 106の範囲内です
。hasNextおよびnext操作を最大105回呼び出します。
上級:
次の条件を満たすソリューションを設計できますか?next()およびhasNext()操作は、O(1)の時間計算量を共有し、O(h)メモリを使用します。ここで、hは木の高さです。
代码:
private List<Integer> list=new ArrayList<Integer>();
private void node(TreeNode root) {
if(root==null) {
return;
}
node(root.left);
list.add(root.val);
node(root.right);
}
public BSTIterator(TreeNode root) {
node(root);
}
public int next() {
if(list.size()>0) {
int a=list.get(0);
list.remove(0);
return a;
}
return 0;
}
public boolean hasNext() {
if(list.size()>0) {
return true;
}
return false;
}