https://www.lintcode.com/problem/binary-search-tree-iterator/description
看着这个题无比眼熟
之前亚麻暑假实习manager问过我
然而 那会是有父指针的
这个题思路是什么呢?
就变成了纯正的中序遍历
非递归版的
而且写法也有要求
不能是while循环在外面的
是要while current的
然后就出了
class BSTIterator {
public:
/*
* @param root: The root of binary tree.
*/
TreeNode* current;
std::stack<TreeNode*> s ;
BSTIterator(TreeNode * root) {
// do intialization if necessary
while (!s.empty()) s.pop();
current = root;
}
/*
* @return: True if there has next node, or false
*/
bool hasNext() {
// write your code here
if (!s.empty() || current) {
return true;
} else {
return false;
}
}
/*
* @return: return next node
*/
TreeNode * next() {
// write your code here
if(hasNext()) {
while (current) {
s.push(current);
current = current ->left;
}
if (!s.empty()) {
current = s.top();
s.pop();
TreeNode* c = current;
current = current->right;
return c;
}
} else return NULL;
}
};