虽说是hard难度但是实际很简单。在构造时直接将树按inorder顺序保存入vector中,时间复杂度为O(N),空间复杂度为O(N),之后再获取node时的复杂度全都为O(1)。
class BSTIterator {
vector<TreeNode*> inOrderList;
vector<TreeNode*>::iterator p;
void inOrderTree(TreeNode* node){
if(!node)
return;
inOrderTree(node->left);
inOrderList.push_back(node);
inOrderTree(node->right);
return;
}
public:
//@param root: The root of binary tree.
BSTIterator(TreeNode *root) {
inOrderTree(root);
p=inOrderList.begin();
}
//@return: True if there has next node, or false
bool hasNext() {
return (p!=inOrderList.end());
}
//@return: return next node
TreeNode* next() {
TreeNode* result=*p;
p++;
return result;
}
};