# 0173. Binary Search Tree Iterator
###### tags: `Leetcode` `Medium` `FaceBook` `Tree Traversal` `Iterator`
Link: https://leetcode.com/problems/binary-search-tree-iterator/
## 思路
### 思路一
不用Recursion,用stack
题目描述给的很清晰 按照它说的一个一个function实现就可以了
### 思路二
inorder Traversal记录每个node的值
## Code
### 思路一
```java=
class BSTIterator {
Stack<TreeNode> stack;
public BSTIterator(TreeNode root) {
stack = new Stack<>();
leftMostIterator(root);
}
public void leftMostIterator(TreeNode root){
while(root!=null){
stack.push(root);
root = root.left;
}
}
public int next() {
TreeNode curr = stack.pop();
leftMostIterator(curr.right);
return curr.val;
}
public boolean hasNext() {
if(!stack.isEmpty()){
return true;
}
return false;
}
}
```
### 思路二
Time complexity : O(N) is the time taken by the constructor for the iterator.
next() would take O(1)
hasNext() would take O(1)
Space complexity : O(N) since we create a new array to contain all the nodes of the BST.
```java=
class BSTIterator {
List<Integer> l;
int idx;
public BSTIterator(TreeNode root) {
idx = 0;
l = new ArrayList<>();
inOrderTraversal(root);
}
public void inOrderTraversal(TreeNode root){
if(root==null) return;
inOrderTraversal(root.left);
l.add(root.val);
inOrderTraversal(root.right);
}
public int next() {
return l.get(idx++);
}
public boolean hasNext() {
if(idx < l.size()){
return true;
}
return false;
}
}
```