设计实现一个带有下列属性的二叉查找树的迭代器:
元素按照递增的顺序被访问(比如中序遍历)
next()和hasNext()的询问操作要求均摊时间复杂度是O(1)
样例
对于下列二叉查找树,使用迭代器进行中序遍历的结果为 [1, 6, 10, 11, 12]
10
/ \
1 11
\ \
6 12
题目链接:http://www.lintcode.com/zh-cn/problem/binary-search-tree-iterator/
直接上代码:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
* Example of iterate a tree:
* BSTIterator iterator = BSTIterator(root);
* while (iterator.hasNext()) {
* TreeNode * node = iterator.next();
* do something for node
*/
class BSTIterator {
public:
stack<TreeNode *> s;
//@param root: The root of binary tree.
BSTIterator(TreeNode *root) {
// write your code here
while (root) {
s.push(root);
root = root->left;
}
}
//@return: True if there has next node, or false
bool hasNext() {
// write your code here
return !s.empty();
}
//@return: return next node
TreeNode* next() {
// write your code here
TreeNode *n = s.top();
s.pop();
TreeNode* res = n;
if (n->right) {
n = n->right;
while(n) {
s.push(n);
n = n->left;
}
}
return res;
}
};