[Java] 173.バイナリ検索ツリーイテレータ---ピットを踏まないように、バイナリツリーの順序どおりのシーケンスを学習します。!!

バイナリ検索ツリーイテレータクラス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;

    }

おすすめ

転載: blog.csdn.net/qq_44461217/article/details/115308783