mplement 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.
很容易想到中序遍历,因为需要在O(1)复杂度完成,所以不能使用在线的方式,在构造函数中先使用中序遍历构建出序列。
两个方法以离线的方式查询就可以了。
过完年要好好加油了
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class BSTIterator {
public:
queue<int> q;
void dfs(TreeNode *root)
{
if(!root) return ;
if(root->left) dfs(root->left);
q.push(root->val);
if(root->right) dfs(root->right);
}
BSTIterator(TreeNode *root)
{
dfs(root);
}
/** @return whether we have a next smallest number */
bool hasNext()
{
if(q.empty()) return false;
return true;
}
/** @return the next smallest number */
int next()
{
int res = q.front();
q.pop();
return res;
}
};
/**
* Your BSTIterator will be called like this:
* BSTIterator i = BSTIterator(root);
* while (i.hasNext()) cout << i.next();
*/