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.
Example:
BSTIterator iterator = new BSTIterator(root); iterator.next(); // return 3 iterator.next(); // return 7 iterator.hasNext(); // return true iterator.next(); // return 9 iterator.hasNext(); // return true iterator.next(); // return 15 iterator.hasNext(); // return true iterator.next(); // return 20 iterator.hasNext(); // return false
Note:
next()
andhasNext()
should run in average O(1) time and uses O(h) memory, where h is the height of the tree.- You may assume that
next()
call will always be valid, that is, there will be at least a next smallest number in the BST whennext()
is called.
题意:给出一个二叉树,要求为其编写一个迭代类BSTIterator。给类有两个方法:next()方法返回二叉树中的最小值元素;hasnext()方法用来判断二叉树中是否还有元素。
思路:中序遍历该二叉树得到其中序遍历序列,并按序加入到队列。调用next()方法时只需返回队列的队首元素即可;调用hasnext()方法时只需判断队列是否为空即可。
class BSTIterator {
public:
TreeNode* p;
queue<int>que;
void vis(TreeNode* root){
if(root){
vis(root->left);
que.push(root->val);
vis(root->right);
}
}
BSTIterator(TreeNode* root) {
vis(root);
}
int next() {
int tmp=que.front();
que.pop();
return tmp;
}
bool hasNext() {
return que.empty()==0?1:0;
}
};