# 【Leetcode】Binary Search Tree Iterator

Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.

Calling next() will return the next smallest number in the BST.

Note: next() and hasNext() should run in average O(1) time and uses O(h) memory, where h is the height of the tree.

1、BST中序遍历，遍历结果存到队列中。next不断出队。next和hasNext时间复杂度为O(1)，空间复杂度为O(n)。

2、用栈保存，空间复杂度为O(h)。

	public class BSTIterator {
Queue<Integer> q = null;

public BSTIterator(TreeNode root) {
q = inOrder(root, q);
}

public Queue<Integer> inOrder(TreeNode p, Queue<Integer> queue) {
if (p != null) {
queue = inOrder(p.left, queue);
queue.offer(p.val);
queue = inOrder(p.right, queue);
}
return queue;
}

/**
* @return whether we have a next smallest number
*/
public boolean hasNext() {
return !q.isEmpty();
}

/**
* @return the next smallest number
*/
public int next() {
return q.poll();
}
}

public class BSTIterator {
Stack<TreeNode> q = null;

public BSTIterator(TreeNode root) {
q = new Stack<TreeNode>();
while (root != null) {
q.push(root);
root = root.left;
}
}

/**
* @return whether we have a next smallest number
*/
public boolean hasNext() {
return !q.isEmpty();
}

/**
* @return the next smallest number
*/
public int next() {
TreeNode t = q.pop();
TreeNode p = t.right;
if (p != null) { // 如果t的右子树不为空，则入栈
q.push(p);
while (p.left != null) {// 压入右子树自上而下所有最左结点
q.push(p.left);
p = p.left;
}
}
return t.val;
}
}

#### leetcode-173：Binary Search Tree Iterator（Java）

2015-08-18 10:58:59

#### Leetcode 173 Binary Search Tree Iterator 二叉查找树迭代器

2015-08-04 18:27:43

#### Leetcode: Binary Search Tree Iterator

2015-01-03 22:13:09

#### Binary Search Tree Iterator 二叉搜索树的遍历

2015-05-28 22:19:41

#### LeetCode(108)Convert Sorted Array to Binary Search Tree

2014-01-18 02:17:01

#### LeetCode 99:Recover Binary Search Tree

2015-12-28 15:37:36

#### [C++]LeetCode: 122 Validate Binary Search Tree (是否是合法BST树)

2015-01-25 17:01:28

#### LeetCode 98 — Validate Binary Search Tree（C++ Java Python）

2014-04-02 09:51:35

#### leetcode 669. Trim a Binary Search Tree

2017-09-04 17:13:08

#### Validate Binary Search Tree -- LeetCode

2014-04-16 04:34:52