【LeetCode問題解】173.二叉探索木反復器
1310 ワード
ツリー反復器を2つのフォークで検索します.ツリーのルートノードを検索して反復器を初期化します.
next()を呼び出すと、二叉検索ツリーの次の最小数が返されます.
ヒント:next() および hasNext() 操作の時間的複雑さは O(1)を使用 O(h)メモリ、そのうち h 木の高さです.君は仮定できる next() 呼び出しは常に有効であり、すなわちnext()を呼び出すと の場合、BSTには少なくとも次の最小数が存在する.
問題:二二叉探索ツリーについて二叉探索ツリーの次の最小数=を返す 中間パスシーケンス のシーケンシャルループ= left - visit - right、非再帰時に補助スタック を使用する left - visit:ルートノードから、ノードおよび左サブツリーノードが順次スタック に入る - right:左サブツリーまたは左サブツリーがアクセスされていません.スタック、右サブツリーノードも二叉検索ツリーのrootです.再帰処理
next()を呼び出すと、二叉検索ツリーの次の最小数が返されます.
ヒント:next() および hasNext() 操作の時間的複雑さは O(1)を使用 O(h)メモリ、そのうち h 木の高さです.君は仮定できる next() 呼び出しは常に有効であり、すなわちnext()を呼び出すと の場合、BSTには少なくとも次の最小数が存在する.
問題:
class BSTIterator {
//
Stack s = new Stack<>();
public BSTIterator(TreeNode root) {
//
dfs(root);
}
/** @return the next smallest number */
public int next() {
TreeNode tmp = s.pop();
// -right
int ret = tmp.val;
if(tmp.right!=null){
// ,
dfs(tmp.right);
}
return ret;
}
/** @return whether we have a next smallest number */
public boolean hasNext() {
if(!s.empty()){
return true;
}else{
return false;
}
}
// left-visit
void dfs(TreeNode root){
while(root!=null){
s.push(root);
root = root.left;
}
}
}